首頁 >後端開發 >C++ >如何在 C# 中正確中止或取消 TPL 任務?

如何在 C# 中正確中止或取消 TPL 任務?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-25 02:36:09168瀏覽

How to Properly Abort or Cancel TPL Tasks in C#?

中止/取消 TPL 任務

在多執行緒程式設計中,當使用 .Abort() 方法終止執行緒時,在該執行緒內建立的任務可能會繼續運行,從而導致意外行為。本文概述了中止或取消 TPL(任務並行庫)任務的正確方法。

TPL 任務在來自執行緒池的後台執行緒上執行,無法直接中止它們。建議的方法是使用取消標記。

取消標記提供了一種向任務發出停止執行訊號的方法。為此:

  1. 建立一個 CancellationTokenSource。
  2. 從源頭取得 CancellationToken。
  3. 透過任務的建構子或 .WithCancellation() 方法將 CancellationToken 傳遞給任務。
  4. 當需要中止任務時,在 CancellationTokenSource 上呼叫 Cancel()。

以下程式碼範例示範了這種方法:

<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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn