日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

本文主要介紹使用CancellationTokenSource調(diào)度并行運行的Task。

一、使用場景

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

二、源碼

2.1 被多線程執(zhí)行的代碼

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

兩點:

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

    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產(chǎn)生,會Attach到父Task上,由父Task統(tǒng)一調(diào)度(parentTask.Start; parentTask.Wait)

    2.3 Task.ContinueWith

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

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

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

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

    轉(zhuǎn)載于:https://www.cnblogs.com/Brake/p/Parallel_Programming_Coodinate_Multi_Task_By_CancellationTokenSource.html

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。