async/await是C#编写异步代码最简洁推荐的方式,使异步操作如同步般直观且不阻塞主线程;需用async修饰方法,await只能用于async方法内,返回类型为void、Task或Task,并注意避免死锁与合理异常处理。

在C#中,async 和 await 是编写异步代码最简洁、最推荐的方式,它们让异步操作看起来像同步代码一样直观,同时不阻塞主线程(比如UI线程或ASP.NET请求线程)。
async和await的基本用法
标记一个方法为异步,需加上 async 修饰符;方法体内遇到耗时操作(如网络请求、文件读写、数据库查询),用 await 等待其完成,而不会真正“卡住”当前线程。
注意:async 方法的返回类型只能是 void(仅限事件处理)、Task(无返回值)或 Task
- 写法示例:
public async Task
{
var client = new HttpClient();
string result = await client.GetStringAsync(url); // 暂停执行,但不阻塞线程
return result;
}
await只能用在async方法里
这是编译器强制要求。如果你在普通方法中写 await,会直接报错。
常见误区:
– 不要为了用 await 而把所有方法都标成 async(即“async 套娃”);
– 不要在构造函数、属性 getter/setter、catch/finally 块中使用 await;
– Main 方法从 C# 7.1 起支持 async,可写成 static async Task Main(string[] args)。
避免死锁:ConfigureAwait(false) 的作用
在 UI 应用(如 WinForms/WPF)或 ASP.NET(非 Core)中,await 默认会尝试回到原来的上下文(SynchronizationContext),如果该上下文正被占用(比如调用了 .Result 或 .Wait()),就可能死锁。
还木有评论哦,快来抢沙发吧~