如何使用Task.Factory.StartNew<>保存不同的过程结果

本文关键字:过程 结果 保存 Task 何使用 Factory StartNew | 更新日期: 2023-09-27 18:30:40

我的电脑有 4 个处理器,我正在尝试使用 Task.Factory.StartNew<> 加快计算时间。我想将每个进程结果保存在数组EachTastResult。问题是下面的代码不会单独保存每个进程结果!当我使用"断点"查看"EachTastResult Array"内容时,我意识到最终过程结果保存在EachTastResult[0],EachTastResult[1],EachTastResult[2]和EachTastResult[3]中。虽然它应该如下:

  • 每个结果[0]= 第一个过程结果
  • 每个结果[1]= 第 2 个进程结果
  • 每个结果[2]= 第 3 个进程结果
  • 每个结果[3]= 第 4 个过程结果

请原谅我的英语不好!

var tasks = new Task[4];
var EachTastResult = new int[4];
for (var proc = 0; proc < 4; proc++)
{
int procIndex = proc;    // Helper for closure
// Start one task per processor
tasks[proc] = Task.Factory.StartNew(() =>{
var NotExist_localCounter = 0;
for (var i = ((proc - 1) * foursec) + 1 ; i <= (proc * foursec); i++)
{
    if (condition_1 ...)
        if (Condition_2 ...)
            NotExist_localCounter++;
}
EachTastResult[procIndex] = NotExist_localCounter;
}, CancellationToken.None,TaskCreationOptions.None ,TaskScheduler.Default);}
Task.WaitAll(tasks);
NotExist_1 = EachTastResult.Sum();
label6.Text=NotExist_1.ToString();

我的错误在哪里?

如何使用Task.Factory.StartNew<>保存不同的过程结果

我认为问题是您没有始终如一地使用"关闭助手"。由于每个Task都使用共享proc变量,因此您计算相同的结果四次。