异步示例:制作早餐
1 | static async Task Main(string[] args) |
🔹 I/O Bound(等待 I/O 的任务)
-
特点:程序瓶颈在等待外部资源(网络、磁盘等),CPU 大部分时间空闲。
-
解决方案:使用
await
异步等待,释放线程资源,避免阻塞主线程。 -
await
会做什么:- 挂起当前方法(如 UI 回调)。
- 控制权交还给事件循环,不阻塞界面。
- 等待完成后再恢复执行。
示例:
1 | var result = await HttpClient.GetAsync("https://api.example.com"); |
🔸 CPU Bound(计算密集型任务)
- 特点:瓶颈在本地 CPU 运算,I/O 很少。
- 解决方案:使用
Task.Run
将计算任务放到线程池,并行执行,减轻主线程压力。
示例:
1 | var result = await Task.Run(() => CalculateSomethingHeavy()); |