数以千计的任务使用相同的 CancellationTokenSource

问题描述 投票:0回答:0

我必须并行运行数千个任务,并且我有 11 个 Cancellationtokensources。对于每个任务,都会注册其中一个标记。由于某种原因,我得到一个 indexoutofrange 异常。 这是代码的一部分

CancellationTokenSource[] Sorces = Enumerable.Range(1, size)
    .Select(y => new CancellationTokenSource()).ToArray();
Dictionary<long,Task> Tasks=...;
int tempaaa=0, remleng=0;
for(;...;)
{
    Prog prg2=new Prog(...);
    tempaaa+=1;
    Tasks.Add(
        tempaaa,
        Task.Factory.StartNew(
            () =>
            {
                try
                {
                    Sorces[remleng].Token.Register( Thread.CurrentThread.Abort );
                    Runner(prg2, Sorces, remleng);
                }
                catch (TaskCanceledException)
                {                   
                }
                finally
                {
                    Tasks.Remove(tempaaa);
                }
            },
            Sorces[remleng].Token, 
            TaskCreationOptions.LongRunning,TaskScheduler.Default
        )
    );
}

我试图为所有任务只注册一个令牌,但即使没有 Cancellationtokensource 数组(因此没有索引),我仍然得到相同的 indexoutofrange 异常。所以我无法弄清楚这个错误的原因。

Thread.CurrentThread.Abort 是必需的,因为没有共享内存,我需要立即停止不需要的线程。

c# multithreading task-parallel-library
© www.soinside.com 2019 - 2024. All rights reserved.