C# Task詳解(學習)
阿新 • • 發佈:2021-08-13
原文地址:C# Task詳解 - 五維思考 - 部落格園 (cnblogs.com)
1. Task 的優勢
ThreadPool 相對於 Thread 具備許多優勢,但 ThreadPool 卻又存在一些使用上的不方便。
比如:
ThreadPool 不支援執行緒的取消、完成、失敗通知等互動性操作。
ThreadPool 不支援執行緒執行的先後次序。
以前,開發者要實現上述功能,需要完成很多額外的工作,現在,FCL中提供了一個功能更強大的概念:Task。Task 線上程池的基礎上進行了優化,並提供了更多的API。在FCL4.0中,編寫多執行緒程式,Task顯然已經優於傳統的方式。
簡單的Demo:
1 using System; 2 using System.Threading; 3 using System.Threading.Tasks; 4 5 namespace TaskDemo 6 { 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 Task t = new Task(() => 12 { 13 Console.WriteLine($"{DateTime.Now} 任務開始工作..."); 14 // 模擬工作過程 15 Thread.Sleep(5000); 16 }); 17 t.Start(); 18 t.ContinueWith((task) => 19 { 20 Console.WriteLine($"{DateTime.Now} 任務完成,完成時的狀態:"); 21 Console.WriteLine("IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}", task.IsCanceled, task.IsCompleted, task.IsFaulted); 22 }); 23 Console.ReadKey(); 24 } 25 } 26 }
2. Task 用法
2.1 建立任務
2.1.1 無返回值的方式
方式1: