ThreadPool.QueueUserWorkItem 接受 WaitCallback 委派,傳回型別為 void,無法取得工作執行結果。
位於 System.Threading.Tasks 命名空間,支援傳回值、等待完成、異常處理、續作鏈結。
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskDemo
{
class Program
{
static void Main(string[] args)
{
Task task = new Task(() => Sum()); // 建立工作
task.Start(); // 排程執行
Console.WriteLine("任務已啟動");
task.Wait(); // 等待完成
Console.WriteLine($"結果: {task.Result}"); // 取得傳回值
}
static int Sum()
{
Console.WriteLine("任務正在執行...");
int sum = 0;
for (int i = 1; i <= 100; i++) { Thread.Sleep(5); sum += i; }
return sum; // 5050
}
}
}
Task<TResult>.Result 直接取得Wait()、WaitAll()、WaitAny()AggregateException 中於 Wait() 或 Result 存取時拋出ContinueWith 鏈結後續工作CancellationToken參考自 Jeffrey Richter 《CLR via C#, Third Edition》,強烈推薦深入研讀。