Task的简单使用
目录
关于Task().Run,Task
1. 针对 I/O 密集型 (网络、数据库、文件)
- 口诀:“原生异步,直接等待”
- 方法定义:必须带
async和Task,不要在里面写Task.Run。 - 调用方式:直接
await。
// 定义:利用底层机制,不占线程
private async Task<string> GetDataAsync()
{
// 内部 await 原生 API
return await HttpClient.GetStringAsync(...);
}
// 调用
string result = await GetDataAsync();2. 针对 CPU 密集型 (计算、死循环、图像处理)
- 口诀:“同步定义,手动跑偏” (指手动扔到偏僻的后台线程去)
- 方法定义:普通的同步方法,不需要
async,不需要Task。 - 调用方式:用
Task.Run包裹后再await。
// 定义:老老实实的普通方法
private int Calculate()
{
Thread.Sleep(5000); // 模拟狂算
return 100;
}
// 调用:由 UI 层决定把它踢到后台
int result = await Task.Run(() => Calculate());唯一的小建议 (命名规范)
在 I/O 密集型的方法(你的 方法A)后面,按照微软规范,最好加上 Async 后缀。
GetUserInfoAsync()DownloadFileAsync()
这样你调用的时候,看到名字带 Async,就知道:“哦,这个可以直接 await,不需要我开 Task.Run”。