日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Parallel Programming-使用CancellationTokenSource调度并行运行的Task

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Parallel Programming-使用CancellationTokenSource调度并行运行的Task 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要介紹使用CancellationTokenSource調度并行運行的Task。

一、使用場景

有多個Task并行運行時,如果其中一個Task所運行的程序出現異常,我們想馬上終止所有待執行的Task。這樣對系統的性能等各個方面都是有好處的。

二、源碼

2.1 被多線程執行的代碼

public class Handler{public void DoSomething(CancellationTokenSource cts, int index){if (cts.IsCancellationRequested){return;}if (index == 2){cts.Cancel();}Console.WriteLine(index);}}

兩點:

  • 判斷cts是否已經取消,如果取消則不再執行。
  • index的=2的時候取消cts。這樣其他在此之后的Task再執行進來的時候IsCancellationRequested就是true。不會再執行。
  • 2.2 Task調度代碼

    public class AppClient{public static void Main(){var cts = new CancellationTokenSource();var childTasks = new List<Task>();var parentTask = new Task(() =>{var taskFactory = new TaskFactory(cts.Token, TaskCreationOptions.AttachedToParent,TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default);for (var i = 0; i < 100; i++){var tempIndex = i;var childTask = taskFactory.StartNew(() => new Handler().DoSomething(cts, tempIndex));childTasks.Add(childTask);}foreach (var task in childTasks){task.ContinueWith(t => cts.Cancel(), TaskContinuationOptions.OnlyOnFaulted);}});parentTask.Start();parentTask.Wait();Console.Read();}}

    上面的代碼在正常情況下會有100個Task產生,會Attach到父Task上,由父Task統一調度(parentTask.Start; parentTask.Wait)

    2.3 Task.ContinueWith

    foreach (var task in childTasks) {task.ContinueWith(t => cts.Cancel(), TaskContinuationOptions.OnlyOnFaulted); }

    這塊代碼的主要含義是當task發生錯誤,比如拋出異常的時候,對cts發起取消。這樣cts處于取消狀態后(IsCancellationRequested==true),后續的操作都會直接return,不再執行。

    這就回到了本文開始的話題:有多個Task并行運行時,如果其中一個Task所運行的程序出現異常,我們想馬上終止所有待執行的Task。這樣對系統的性能等各個方面都是有好處的。

    并行編程打算寫一個系列的文章好好總結一下。

    轉載于:https://www.cnblogs.com/Brake/p/Parallel_Programming_Coodinate_Multi_Task_By_CancellationTokenSource.html

    總結

    以上是生活随笔為你收集整理的Parallel Programming-使用CancellationTokenSource调度并行运行的Task的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。