我的计算机有4个处理器,我正试图通过使用Task.Factory.StartNew<>来加快计算时间。我希望将每个进程结果保存在EachTastResult数组中。问题是下面的代码没有单独保存每个进程的结果!当我使用‘断点’来查看‘EachTastResult Array’内容时,我意识到最终的进程结果保存在EachTastResult、EachTastResult1、EachTastResult2和EachTastResult3中。虽然它应该是如下:
原谅我英语不好!
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();我的错误在哪里?
发布于 2014-12-20 14:32:30
我认为问题在于你没有始终如一地使用你的“帮助关闭”。因为每个Task都使用共享的proc变量,所以您要计算相同的结果四次。
https://stackoverflow.com/questions/26988605
复制相似问题