C#5.0中引入了构建异步方法的新特性---async/await。本文根据自己的理解讲述异步方法三种返回方式和取消异步操作的示例。
在此之前先说说异步方法的语法特点:
- 方法名称一般是Async 结尾。
- 可以包含一个或者多个await表达式。
- 异步方法的参数不能使用ref和out参数。
- 方法头包含async关键字,并且在返回类型之前。
- 除了方法之外, Lambda 表达式和匿名函数也可以作为异步对象。
先来看看同步程序的运行示例,
DownLoadTest类的代码如下:
Stopwatch watch = new Stopwatch();
public DownLoadTest()
{
watch.Start();
}
public void DoRun()
{
Debug.WriteLine(string.Format("同步程序开始运行:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
string t1 = DownLoadString("https://stackoverflow.com/");
string t2 = DownLoadString("https://github.com/");
Debug.WriteLine(string.Format("同步程序运行结束:{0,4:N0}ms", watch.Elapsed.TotalMilliseconds));
}
public string DownLoadString(string url)
{
Debug.WriteLine(string.Format("下载{0}开始运行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
WebClient wc = new WebClient();
string str = wc.DownloadString(url);
Debug.WriteLine(string.Format("下载{0}运行结束 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
return str;
}
在控制台运行的代码如下:
static void Main(string[] args)
{
DownLoadTest dwtest = new DownLoadTest();
dwtest.DoRun();
Debug.WriteLine(string.Format("主线程运行结束"));
Console.ReadKey();
}
运行的结果在调试输出窗口显示如下:
同步程序开始运行: 0ms
下载https://stackoverflow.com/开始运行 : 26ms
下载https://stackoverflow.com/运行结束 :1,860ms
下载https://github.com/开始运行 :1,861ms
下载https://github.com/运行结束 :3,579ms
同步程序运行结束:3,580ms
主线程运行结束
可以看到程序完全的按照代码顺序执行
异步方法示例代码说明:
我们在DownLoadTest添加一个异步的方法,返回Task<string