我的电脑有4个处理器,我正在尝试使用Task.Factory.StartNew<>
加快计算时间。我想将每个进程结果保存在EachTastResult
数组中。问题是下面的代码不会单独保存每个过程结果!
当我使用&#39; Breakpoint&#39;看到'EachTastResult Array&#39;内容,我意识到Final Process结果保存在EachTastResult [0],EachTastResult [1],EachTastResult [2]和EachTastResult [3]中。虽然它应该如下:
请原谅我糟糕的英语!
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();
我的错误在哪里?
答案 0 :(得分:0)
我认为问题在于你并没有始终如一地使用“Helper for closure”。由于每个Task
使用共享的proc
变量,因此您将四次计算相同的结果。