我必须并行运行数千个任务,并且我有 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 是必需的,因为没有共享内存,我需要立即停止不需要的线程。