用Task去包装EAP
包装EAP的话,我们需要用TaskCompletionSource包装器进行包装
aysc await 本质上也是一个包装器
可以下载网页中的数据
class Program
{
static void Main(string[] args)
{
var task = GetTaskAsyc("http://cnblogs.com");
var nums = task.Result;
Console.WriteLine(nums);
Console.Read();
}
public static Task<string> GetTaskAsyc(string url)
{
TaskCompletionSource<string> source = new TaskCompletionSource<string>();
WebClient client = new WebClient();
client.DownloadDataCompleted += (sender,e) =>
{
try
{
byte[] msg = e.Result;
string d= Encoding.UTF8.GetString(msg);
//如果下载完成了,将当前的bytep[]个数给task包装器
source.TrySetResult(d);
}
catch (Exception ex)
{
source.TrySetException(ex);
}
};
client.DownloadDataAsync(new Uri(url));
return source.Task;
}
}
}
浙公网安备 33010602011771号