C# async/await 使用总结
今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理。
混淆了一个调用异步方法的概念:
在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经开始执行。该方法在调用时,即刻执行了一部分代码,直接最底层的 Async API 处才产生真正的异步操作,这时向上逐步返回,并最终使用一个 Task 来代表该异步任务。
当不使用 await 关键字时,该异步方法同样在异步执行。而使用 await 关键字后,只不过是对 Task(awaitable) 对象异步等待其执行结束,然后再同上下文中执行后续代码。
如果使用 await task.ConfigureAwait(false),表示该行后的代码,都不需要一定在同一上下文中执行。
也就是说,对于 Task Run() 的调用来说:
1. RunAsync():直接执行该异步方法,后续代码紧接着执行。
2. await RunAsync():执行异步方法,并在结束后再执行后续代码(在此行代码之前的代码在同一线程中执行)。
3. await RunAsync().ConfigureAwait(false):执行异步方法,并在结束后再执行后续代码(执行的线程不指定)。
Await 的使用
另外,由于 await 只针对 awaitable 对象,所以并不要求一定要在异步方法之前使用。可以在适当的时候再使用 await,例如:
var task = RunAsync();//开始执行异步操作。
DoSth();//同时主线程执行其它操作。
await task;//此时等待异步执行完成。
DoOtherThing();//再执行其它操作。
参考:
下面,列出几篇 async await 相关的文章
dudu:实际案例:在现有代码中通过async/await实现并行
C# 5.0 Async Tips and Tricks, Part 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2016-06-08 WCF服务编程-基础
2016-06-08 Entity Framework 数据库先行、模型先行、代码先行
2016-06-08 C# FTP上传下载(支持断点续传)
2016-06-08 使用WCF上传文件
2015-06-08 QTimerLine类学习
2014-06-08 QFtp类参考