并行性改进

本文关键字:并行性 | 更新日期: 2023-09-27 18:25:23

是否有更好的并行模式可以在以下代码中改进?有了C#中所有新的Task功能,我想知道是否还有改进的空间。对TaskManager.StartNew的调用是对Task.Factory.StartNew进行异常处理的包装。它基本上创建了一个Task数组,然后调用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);

并行性改进

这取决于每个任务中运行的内容。如果这些任务是cpu绑定的(例如繁重的计算),那么您可以使用这些代码。然而,如果这些任务是I/O绑定的(如web服务调用、数据库调用、文件操作),那么最好以异步/等待的方式进行设计。这样就不会阻塞所有的核心。

如果你有4个核心,比方说有8个任务,那么实际上你的代码是4乘4完成任务的。当您用async/await模式重写它时,所有任务都将并行运行。但同样,如果您的任务是cpu绑定的,则不需要这样做。