目录

Task的简单使用

关于Task().Run,Task的使用

1. 针对 I/O 密集型 (网络、数据库、文件)

  • 口诀“原生异步,直接等待”
  • 方法定义:必须带 asyncTask不要在里面写 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”。