亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何取消任務類型集合中的特定任務

如何取消任務類型集合中的特定任務

C#
拉丁的傳說 2022-12-31 11:17:10
所以我想找出一種方法來取消特定任務。在示例中,我想取消它生成的 3 個任務中的 2 個static async Task Main(string[] args){    var tasks = Enumerable.Range(0, 3).Select(x => Task.Run(() =>    {        Counter();    }));    await Task.WhenAll(tasks);    Console.ReadLine();}public static void Counter(){    while (true)    {        for (int i = 0; i < 1000; i++)        {            Console.WriteLine(i);        }    }}如果我要這樣做while (someProperty)并更改someProperty為false然后所有線程都會停止。我想停止 2/3,我該怎么做?
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

CancellationToken如果你想單獨取消它們,你需要為你開始的每個任務傳遞一個:


static async Task Main(string[] args)

{

    var cancellationSources = Enumerable.Range(0, 3)

      .Select(_ => new CancellationTokenSource())

      .ToList();


    var tasks = Enumerable.Range(0, 3).Select(x => Task.Run(

        () => Counter(cancellationSources[x].Token),

        cancellationSources[x].Token

    ));


    cancellationSources[1].Cancel();


    await Task.WhenAll(tasks);


    Console.ReadLine();


}


public static void Counter(CancellationToken cancellationToken)

{

    while (!cancellationToken.IsCancellationRequested)

    {

        // or while(true) and token.ThrowIfCancellationRequested(); to throw instead


        for (int i = 0; i < 1000; i++)

        {

            Console.WriteLine(i);

        }

    }

}


查看完整回答
反對 回復 2022-12-31
  • 1 回答
  • 0 關注
  • 100 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號