为了账号安全,请及时绑定邮箱和手机立即绑定

如何取消任务类型集合中的特定任务

如何取消任务类型集合中的特定任务

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 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信