C# async task<T> await 举例不阻塞主线程
时间: 2024-09-25 15:21:12 浏览: 36
C#关键字async/await用法
5星 · 资源好评率100%
在C#中,`async` 和 `await` 关键字一起用于编写异步代码,使得任务可以在后台线程上运行,而不会阻塞主线程。`Task<T>` 是一个代表异步操作的结果的任务类型,`await` 关键字用于暂停当前的异步方法直到等待的操作完成。
例如,假设我们有一个网络请求需要执行,这通常是一个耗时操作:
```csharp
public async Task<string> GetDataFromServer()
{
using (var client = new HttpClient())
{
var response = await client.GetAsync("https://api.example.com/data");
if (!response.IsSuccessStatusCode)
return null;
// 等待响应内容加载完成
var content = await response.Content.ReadAsStringAsync();
return content;
}
}
```
在这个例子中,
1. `GetAsync` 方法开始执行一个异步操作并返回一个 `Task<HttpResponseMessage>` 对象。
2. 使用 `await client.GetAsync` 后,`GetDataFromServer` 方法并不会在这里阻塞,它会继续执行后面的代码。
3. 当网络请求完成后,`GetResponseAsStringAsync` 被 `await`,这意味着只有当数据真正读取完毕,这个异步操作才会结束,并将结果赋值给 `content` 变量。
这样做的好处是可以提高程序的响应性和用户体验,因为主线程可以继续处理其他事情,而不是等待长时间的网络请求。
阅读全文