C#如何使用async和await C#异步编程入门指南

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

C#如何使用async和await C#异步编程入门指南-第1张图片-佛山资讯网

在C#中,asyncawait 是编写异步代码最简洁、最推荐的方式,它们让异步操作看起来像同步代码一样直观,同时不阻塞主线程(比如UI线程或ASP.NET请求线程)。

async和await的基本用法

标记一个方法为异步,需加上 async 修饰符;方法体内遇到耗时操作(如网络请求、文件读写、数据库查询),用 await 等待其完成,而不会真正“卡住”当前线程。

注意:async 方法的返回类型只能是 void(仅限事件处理)、Task(无返回值)或 Task(有返回值)。

  • 写法示例:

public async Task DownloadDataAsync(string url)
{
  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()),就可能死锁。

标签: ai win 异步任务 c# .net

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~