using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace WebClientAsynProject
{
public class Program
{
#region HttpWebRequest异步GET
public static void AsyncGetWithWebRequest(string url)
{
var request = (HttpWebRequest) WebRequest.Create(new Uri(url));
request.BeginGetResponse(new AsyncCallback(ReadCallback), request);
}
private static void ReadCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest) asynchronousResult.AsyncState;
var response = (HttpWebResponse) request.EndGetResponse(asynchronousResult);
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
var resultString = streamReader.ReadToEnd();
Console.WriteLine(resultString);
}
}
#endregion
#region WebClient异步GET
public static void AsyncGetWithWebClient(string url)
{
var webClient = new WebClient();
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
webClient.DownloadStringAsync(new Uri(url));
}
private static void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//Console.WriteLine(e.Cancelled);
Console.WriteLine(e.Error != null ? "WebClient异步GET发生错误!" : e.Result);
}
#endregion
#region WebClient的OpenReadAsync测试
public static void TestGetWebResponseAsync(string url)
{
var webClient = new WebClient();
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri(url));
}
private static void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if(e.Error == null)
{
var streamReader = new StreamReader(e.Result);
var result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
else
{
Console.WriteLine("执行WebClient的OpenReadAsync出错:" + e.Error);
}
}
#endregion
public static void Main(string[] args)
{
AsyncGetWithWebRequest("http://baidu.com");
Console.WriteLine("hello");
AsyncGetWithWebClient("http://baidu.com");
Console.WriteLine("world");
TestGetWebResponseAsync("http://baidu.com");
Console.WriteLine("jxqlovejava");
Console.Read();
}
}
}

C#实现异步GET的方法的更多相关文章

  1. C#异步调用的方法

    最经公司工作需要调用一个外部的webservice,同时要将传出的数据进行保存,以自己以前的习惯,就打算逐步操作,失败啊,完全没考虑过用户体验效果,在同事指点下,意识到使用异步调用的好处,随便将自己找 ...

  2. [转载]C#异步调用四大方法详解

    C#异步调用四大方法是什么呢?C#异步调用四大方法的使用是如何进行的呢?让我们首先了解下什么时候用到C#异步调用: .NET Framework 允许您C#异步调用任何方法.定义与您需要调用的方法具有 ...

  3. Android常用异步任务执行方法

    Handler原理及基本概念 Message 意为消息,发送到Handler进行处理的对象,携带描述信息和任意数据. MessageQueue 意为消息队列,Message的集合. Looper 有着 ...

  4. node 异步回调解决方法之yield

    先看如何使用 使用的npm包为genny,npm 安装genny,使用 node -harmony 文件(-harmony 为使用es6属性启动参数) 启动项目 var genny= require( ...

  5. 通过Ajax异步提交的方法实现从数据库获取省份和城市信息实现二级联动(xml方法)

    之前有写过是从JavaScript数组里获取省市信息来实现二级联动,但是似乎有很多需求是要从数据库里获取信息,所以就需要根据异步提交,局部刷新的思想来实现来提高用户交互问题 第一种方法是xml方法 1 ...

  6. JS常用方法总结,及jquery异步调用后台方法实例

    //前台接收get参数值 function getQueryString(name) {            var queryStrings = window.location.search.sp ...

  7. node中处理异步常用的方法,回调函数和events 模块处理异步

    // npm install -g supervisor supervisor http.js就可以实现热更新的效果 //引入http模块 var http = require('http'); va ...

  8. 使用Ajax异步上传图片的方法(html,javascript,php)

    前两天项目中需要用到异步上传图片和显示上传进度的功能,于是找了很多外国的文章,翻山越岭地去遇上各种坑,这里写篇文章记录一下. HTML <form id="fileupload-for ...

  9. ajax异步导致js方法顺序执行不了

    js两个方法调用的顺序,有时候是这样的 f1(); f2(); 本来是先执行f1的,但是如果f1里面进行ajax异步    async:true,那么可能会先执行f2,如果想要顺序执行,那么就把异步设 ...

  10. 【C#】往异步下载的方法传递自定义完成事件

    封装自定义的异步下载方法时,正常情况下是这样的: /// <summary> /// 异步方法:联网下载文件,保存到本地. /// </summary> /// <par ...

随机推荐

  1. php中的$_GET如何获取带有“#”的参数

    <?php echo $_GET['key']; ?> 当url为http://test.com/c.php?key=999时,正常输出:999 当url为http://test.com/ ...

  2. HDU 1003 最大连续和

    http://www.acmerblog.com/hdu-1003-Max-Sum-1258.html 这里难点只有求起始位置,把握状态变化就行.一般这种子序列问题,都可以用dp简化 #include ...

  3. HDU 5014 异或之和

    http://acm.hust.edu.cn/vjudge/contest/122814#problem/H 这道题就是求异或之和 知识点: a^b = c 等价于 b^c =a 和 a^c = b ...

  4. PAT 1037 Magic Coupon

    #include <cstdio> #include <cstdlib> #include <vector> #include <algorithm> ...

  5. Django——stark组件

    stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作. 一.配置 1.创建stark应用,在settings.py中注册stark应用 st ...

  6. JavaScript数组求和

    <script> function demo(){ var d=document.getElementsByTagName("input")[0].value.spli ...

  7. JSP数据库综合练习

    一.问题概述         实现了数据库的增删改查和分页显示.         分页显示:mysql String cmd = "select * from t_user limit &q ...

  8. CSS中的各类选择器

    属性选择器 结构性伪类选择器 UI状态伪类选择器 CSS其他选择器

  9. wx.grid

    wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEdit ...

  10. [C# 网络编程系列]专题八:P2P编程

    引言: 前面的介绍专题中有朋友向我留言说介绍下关于P2P相关的内容的,首先本人对于C#网络编程也不是什么大牛,因为能力的关系,也只能把自己的一些学习过程和自己的一些学习过程中的理解和大家分享下的,下面 ...