中止/取消 TPL 任務
在多執行緒程式設計中,當使用 .Abort() 方法終止執行緒時,在該執行緒內建立的任務可能會繼續運行,從而導致意外行為。本文概述了中止或取消 TPL(任務並行庫)任務的正確方法。
TPL 任務在來自執行緒池的後台執行緒上執行,無法直接中止它們。建議的方法是使用取消標記。
取消標記提供了一種向任務發出停止執行訊號的方法。為此:
以下程式碼範例示範了這種方法:
<code class="language-csharp">class Program { static void Main() { var cts = new CancellationTokenSource(); CancellationToken ct = cts.Token; Task.Factory.StartNew(() => { while (!ct.IsCancellationRequested) { // 执行一些繁重的工作 Thread.Sleep(100); // 检查取消请求 if (ct.IsCancellationRequested) { Console.WriteLine("任务已取消"); break; } } }, ct); // 模拟等待任务完成 3 秒 Thread.Sleep(3000); // 无法再等待 => 取消此任务 cts.Cancel(); Console.ReadLine(); } }</code>
This revised example uses !ct.IsCancellationRequested
in the while
loop condition for better readability and clarity, directly checking for the cancellation request within the loop。 .
以上是如何在 C# 中正確中止或取消 TPL 任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!