C# 使用任务数组中使用的令牌停止任务

C# 使用任务数组中使用的令牌停止任务,c#,multithreading,task,token,C#,Multithreading,Task,Token,我举了一个例子: var asyncTasks = new Task[list.Length]; for (int i = 0; i< list.Length; i++) { asyncTasks[i] = tf(cts.Token, list[i]); } await Task.WhenAll(asyncTasks); //do other stuffs when all tasks completed 编辑:在我的取消按钮中,我声明:cts.c

我举了一个例子:

var asyncTasks = new Task[list.Length];
for (int i = 0; i< list.Length; i++)
{
    asyncTasks[i] = tf(cts.Token, list[i]);                
}
await Task.WhenAll(asyncTasks);
//do other stuffs when all tasks completed
编辑:在我的取消按钮中,我声明:cts.cancel()


这种方法对我来说很有效,因为它同时执行一系列任务,但我认为我无法发送取消请求的令牌,因为所有已分配的
cts.token
都是有效的,因此如果在另一个按钮中尝试
cts.Cancel()
这将不起作用。我如何做同样的事情,但使取消令牌请求有效?

问题是,我使用
cts=new CancellationTokenSource()重置每次调用的令牌功能

固定功能:

private async Task tf(CancellationToken token , string list)
{
        try
        {
            await Task.Run(() =>
            {
                if (token.IsCancellationRequested)
                {
                    MessageBox.Show("Stopped", "Operation Aborted");
                    token.ThrowIfCancellationRequested();
                    cts = new CancellationTokenSource();
                } 
                // do something
            }, token);
       }catch{}
}

为什么不起作用?您已经准确地描述了CancellationTokens应该如何工作:您从源代码传入令牌并调用
cts.Cancel()
。请用其他详细信息回答您的问题。修改了更多详细信息,但对meIs it me不起作用,或者您是在一个任务中冗余运行一个任务?那么您想做什么,启动一系列任务,并使用取消令牌同时取消所有任务?确切地说,该方法适用于我尝试执行的操作,但这是唯一的约束
private async Task tf(CancellationToken token , string list)
{
        try
        {
            await Task.Run(() =>
            {
                if (token.IsCancellationRequested)
                {
                    MessageBox.Show("Stopped", "Operation Aborted");
                    token.ThrowIfCancellationRequested();
                    cts = new CancellationTokenSource();
                } 
                // do something
            }, token);
       }catch{}
}