CancellationToken 並非自動注入 Action 參數,而是由任務基礎設施監控。Action 內部必須主動檢查或傳遞給可取消的 API。
var cts = new CancellationTokenSource();
Task.Run(() => {
for (int i = 0; i < 10000; i++) {
cts.Token.ThrowIfCancellationRequested(); // 拋出 OperationCanceledException
DoWork(i);
}
}, cts.Token);
// 別處呼叫取消
cts.Cancel();
Task.Run(async () => {
await httpClient.GetAsync(url, cts.Token); // HttpClient 內部監控 token
await Task.Delay(5000, cts.Token); // Delay 可直接取消
}, cts.Token);
Task.Run 將 CancellationToken 註冊到任務的 CancellationTokenRegistration。cts.Cancel() → Token 進入「已取消」狀態。詳細原理請參閱:任務取消機制深度剖析