async/await
C# 支持含两个关键字的异步程序:async
和 await
。 将 async
修饰符添加到方法声明中,以声明这是异步方法。 await
运算符通知编译器异步等待结果完成。 控件返回给调用方,该方法返回一个管理异步工作状态的结构。 结构通常是 System.Threading.Tasks.Task<TResult>,但可以是任何支持 awaiter 模式的类型。 这些功能使你能够编写这样的代码:以其同步对应项的形式读取,但以异步方式执行。 例如,以下代码会下载 Microsoft Docs 的主页:
C#复制
public async Task<int> RetrieveDocsHomePage()
{
var client = new HttpClient();
byte[] content = await client.GetByteArrayAsync("https://learn.microsoft.com/");
Console.WriteLine($"{nameof(RetrieveDocsHomePage)}: Finished downloading.");
return content.Length;
}
这一小型示例显示了异步编程的主要功能:
- 方法声明包含
async
修饰符。 - 方法
await
的主体是GetByteArrayAsync
方法的返回。 return
语句中指定的类型与方法的Task<T>
声明中的类型参数匹配。 (返回Task
的方法将使用不带任何参数的return
语句)。