C#中async和await的定义及使用
|
admin
2024年1月31日 16:27
本文热度 615
|
在C#编程语言中,async
和await
是两个关键字,它们共同用于简化异步编程。异步编程是一种编程模式,它允许程序在等待某些操作(通常是I/O操作,如网络请求或磁盘读写)完成时,不会阻塞当前的执行线程,从而提高应用程序的响应性和性能。
定义
async:async
关键字用于定义一个方法,表示该方法内部包含异步操作,即该方法可能在执行过程中不会立即完成,而是会在某个点等待一个异步操作完成。被async
修饰的方法通常会返回一个Task
或Task<TResult>
对象,表示一个正在进行的操作。
await:await
关键字只能在被async
修饰的方法内部使用。它用于等待一个异步操作完成,而不会阻塞当前线程。await
后面通常跟着一个返回Task
或Task<TResult>
的异步方法调用。当await
表达式执行时,它会暂停当前方法的执行,直到所等待的异步操作完成,然后继续执行方法中的后续代码。
使用
下面是一个简单的示例,展示了如何在C#中使用async
和await
关键字:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args) // Main方法也可以使用async和await(从C# 7.1开始)
{
string data = await FetchDataFromWebAsync("https://example.com");
Console.WriteLine(data);
}
static async Task<string> FetchDataFromWebAsync(string url)
{
using (HttpClient client = new HttpClient())
{
// 使用await等待异步网络请求完成
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
}
}
在这个示例中,FetchDataFromWebAsync
方法被标记为async
,因为它内部执行了异步的网络请求。await client.GetAsync(url)
和await response.Content.ReadAsStringAsync()
这两行代码都使用了await
关键字来等待异步操作完成。
Main
方法也被标记为async
,并且它使用了await
来等待FetchDataFromWebAsync
方法的执行结果。由于Main
方法是程序的入口点,并且从C# 7.1开始,Main
方法也被允许是异步的,这极大地简化了异步代码的编写。
使用async
和await
的好处是它们提供了一种直观的方式来编写异步代码,而不需要显式地处理回调方法或复杂的线程同步问题。编译器会自动生成必要的状态机代码来管理异步操作的执行流程。
注意:尽管async
和await
使得异步代码看起来像同步代码,但程序的执行仍然是异步的。这意味着在等待异步操作完成时,不会阻塞调用线程,从而提高了应用程序的响应性。
该文章在 2024/1/31 16:27:36 编辑过