是否有更好的并行模式可以在以下代码中得到改进?使用C#中的所有新任务功能,我想知道是否还有改进的余地。对TaskManager.StartNew的调用是Task.Factory.StartNew的包装器,带有异常处理。它基本上创建了一个Tasks数组,然后调用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 :(得分:0)
这取决于每项任务的运行情况。如果这些任务是cpu绑定的(例如重型计算),那么你可以使用这段代码。但是,如果这些任务受I / O限制(如Web服务调用,数据库调用,文件操作),那么最好以异步/等待方式设计它。这样你就不会阻止你拥有的所有内核。
如果你有4个内核并且可以说8个任务,实际上你的代码完成了4个4的作业。当你用async / await模式重写它时,所有任务都将并行运行。但是,如果你的任务是cpu绑定的,你也不需要这样做。