2014-10-01 33 views
0

是否有更好的并行性模式,可以在以下代码中进行改进?有了C#中的所有新任务功能,我想知道是否还有改进的余地。对TaskManager.StartNew的调用是Task.Factory.StartNew的异常处理包装。它基本上创建一个任务数组,然后调用WaitAll方法。这是平行执行这些任务的最佳方式吗?并行性改进

var queries = new Task[] 
     { 
      TaskManager.StartNew(() => 
       { 
        ... 
       }, context.UserContextContainer.UserContext), 
      TaskManager.StartNew(() => 
       { 
        ... 
       }, context.UserContextContainer.UserContext), 
      TaskManager.StartNew(() => 
       { 
        ... 
       }, context.UserContextContainer.UserContext), 
      TaskManager.StartNew(() => 
       { 
        ... 
       }, context.UserContextContainer.UserContext), 
      TaskManager.StartNew(() => 
       { 
        ... 
       }, context.UserContextContainer.UserContext) 
     }; 


    Task.WaitAll(queries); 
+0

可能更适合CodeReview?我会举动移动。 – 2014-10-01 14:51:05

+0

你的问题的答案是肯定的。 – 2014-10-01 15:05:23

+1

你在做什么工作?请详细说明。它是否受IO限制? CPU绑定?有没有共享状态? – 2014-10-01 15:36:32

回答

0

这取决于在每个任务中运行的是什么。如果这些任务是cpu-bound(例如繁重的计算),那么你可以使用这个代码。但是,如果这些任务是I/O绑定的(如Web服务调用,数据库调用,文件操作),那么最好是以异步/等待方式来设计它。这样你就不会阻止你拥有的所有核心。

如果你有4个内核,并且可以说8个任务,实际上你的代码是通过4个执行4个任务的。当你用异步/等待模式重写它时,所有任务都将并行运行。但是,如果你的任务受CPU限制,你也不需要这样做。

+0

“异步/等待”的意思是什么? – Ray 2014-10-21 01:03:49

+0

你可以看看http://www.infoq.com/articles/Tasks-Async-Await – 2014-10-23 23:27:36