首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Task.Factory.StartNew<>保存不同的进程结果?

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

Stack Overflow用户
提问于 2014-11-18 07:13:30
回答 1查看 214关注 0票数 0

我的计算机有4个处理器,我正试图通过使用Task.Factory.StartNew<>来加快计算时间。我希望将每个进程结果保存在EachTastResult数组中。问题是下面的代码没有单独保存每个进程的结果!当我使用‘断点’来查看‘EachTastResult Array’内容时,我意识到最终的进程结果保存在EachTastResult、EachTastResult1、EachTastResult2和EachTastResult3中。虽然它应该是如下:

  • EachTastResult=第1工艺结果
  • EachTastResult1= 2工艺结果
  • EachTastResult2= 3工艺结果
  • EachTastResult3= 4工艺结果

原谅我英语不好!

代码语言:javascript
运行
复制
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();

我的错误在哪里?

EN

回答 1

Stack Overflow用户

发布于 2014-12-20 14:32:30

我认为问题在于你没有始终如一地使用你的“帮助关闭”。因为每个Task都使用共享的proc变量,所以您要计算相同的结果四次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26988605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档