相對於 Thread 類別的 worker 概念,Task 就是工作本身
看起來也就是流程、函數一樣概念,所以
Action、Func 也常跟 Task 一起出現
但是 Task
作用於非同步,則是多了可延遲執行的相關特性
也很自然地跟 async/await 語法整合在一起
Task 執行工作的時候沒有新建 Thread,是使用 ThreadPool 的 Thread
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Task.Run(() => | |
{ | |
Console.WriteLine($"IsThreadPoolThread: {Thread.CurrentThread.IsThreadPoolThread}"); | |
}); | |
// IsThreadPoolThread: True |
Task 的屬性則主要跟工作目前的狀態相關。
比較特別的是 Task.Factory 提供了建立 Task 與 Task<TResult> 的功能
使用上主要則涵蓋了以下情境,並提供沒有回傳值 Task + Action 與有回傳值 Task<TResult> + Func 的版本
- Task 建立
- 基於 CancellationToken 的取消機制 (Thread 也支援)
- 單一 Task 的執行、等待
- 與其他 Task 合作時的串接、等待、觸發機制
- 較低階的排程方式、Awaiter/Awatiable 機制
同樣位於 System.Threading.Tasks 中,還有一個特別的 Parallel 類別
則是提供了整合數字範圍、陣列、IEnumerable、OrderablePartitioner、Partitioner 的平行迴圈機制
沒有留言:
張貼留言