在学习新的async和await关键字之前,先看看.NET Framework的异步模式。从.NET Framework 1.0 开始就提供了异步特性,而且.NET Framework的许多类都实现了一个或这多个异步模式。
下面开始执行同步网络调用,然后介绍不同的异步模式:
- 异步模式
- 基于事件的异步模式
- 基于任务的异步模式
异步模式是处理异步特性的第一种方式,它不仅可以使用几个API,还可以使用基本功能(如委托类型)。
因为在Windows Forms和WPF中,用异步模式更新界面非常的复杂,所以.NET Framework 2.0推出了基于事件的异步模式。在这种模式中,事件处理程序是被拥有同步上下文的线程调用,所以更新界面很容易用这种模式处理。在此之前,这种模式也称为异步组件模式。
在.NET Framework 4.5中,推出了另外一种方式来实现异步编程:基于任务的异步模式(TAP)。这种模式是基于Task类型,并通过async和await关键字使用编译器功能。
HistorySample的示例代码至少使用了C# 7.1和以下名称空间:
System
System.IO
System.Net
System.Threading.Tasks
发出HTTP请求的示例应用程序是System.Net API提供同步和异步API中的一个好例子。
同步调用
下面从使用WebClient类的同步版本开始。这个类提供了几个同步的API,如DownloadString、DownloadFile和DownloadData。在下面的代码片段中,DownloadString发出一个HTTP请求并在字符串内容中写入响应,该字符串的子字符串被写入控制台:
private const string url = "http://www.cninnovation.com";
private static void SynchronizedAPI()
{
System.Console.WriteLine(nameof(SynchronizedAPI));
using(var client = new WebClient())
{
string content = client.DownloadString(url);
System.Console.WriteLine(content.Substring(0,1000));
}
}
输出如下:
SynchronizedAPI
<!-- basing on ~/assan-v2.5/templates/main