C#异步编程的async和await简单了解
常用的多线程写法:
Thread.Start;
ThreadPool.QueueUserWorkItem;
Task.Run;
那async和await又是什么?
async和await就是个语法糖,为了方便控制线程执行顺序;
必须成对出现,若方法标记为async但内部没有await,那就是个同步方法;
await必须写在async标记的方法内部;
async依赖于Task,它本身并不会创建线程,其标记的方法会返回一个Task;
进入async方法,程序仍由主线程执行,执行到await开始task异步,主线程可以去干其他事情了,
await的异步执行完毕后,await后面的代码等同于一个完成后的回调。
所以如果只是需要异步,但不涉及到回调,不需要线程间通信,那不需要用到async/await;
记录几个代码段:

1 public static void DoWork() 2 { 3 Console.WriteLine("这里是主线程1"); 4 AMethod(); 5 Console.WriteLine("这里是主线程3"); 6 } 7 public static async Task<string> AMethod() 8 { 9 Console.WriteLine("这里是主线程2"); 10 await Task.Run(() => 11 { 12 for (int i = 0; i < 1000000; i++) ; 13 Console.WriteLine("这里是子线程1"); 14 }); 15 Console.WriteLine("这里是子线程2"); 16 return "123"; 17 }
换个写法:

1 public static void DoWork() 2 { 3 Console.WriteLine("这里是主线程1"); 4 var t = AMethod(); 5 Console.WriteLine(t.Result + "这里是主线程3,需等待"); 6 }
再换个:

public static async void DoWork() { Console.WriteLine("这里是主线程1"); var t = AMethod(); await t; Console.WriteLine("这里是子线程3"); }
await后面的代码不是由主线程执行,我的理解是随机分配的线程执行的;(基于console测试,winform未试)
具体程分配机制我还不太清楚,后续有时间再研究。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)