繁体   English   中英

并行运行时任务速度较慢

[英]Tasks are slower when running in parallel

我很难理解为什么这个代码:

// Example #1
foreach (var task in tasks)
{
    task.Start();
    task.Wait();
}

运行速度比:

// Example #2
foreach (var task in tasks)
{
    task.Start();
}

foreach (var task in tasks)
{
    task.Wait();
}

示例 #1 在 1-2 秒内执行所有任务,示例 #2 需要将近 20 秒才能执行。 变量tasksTask[]类型。

阵列中大约有十几个任务,每个任务需要 500-1000 毫秒来执行。 没有 CPU 限制,因为任务只是向服务器发送 HTTP 请求。

在此处输入图片说明 在此处输入图片说明

这对我来说没有任何意义。

我用@StephenCleary帮助程序库解决了我的问题: https : //github.com/StephenCleary/AsyncEx

AsyncContext.Run(async () =>
{
    foreach (var task in tasks) task.Start();
    await Task.WhenAll(tasks);
});

现在,它的运行速度与#1示例一样快,而且可以正确地等待所有请求完成。

你可以使用这个:

class Program
{
    static void Main(string[] args)
    {
        Task.Run(async () => { 
            List<Task> tasks = new List<Task>();

            for (int i = 0; i < 10; i++)
            {
                int x = i; // closure
                tasks.Add(Task.Factory.StartNew(() => Console.WriteLine(x.ToString())));
            }
            await Task.WhenAll(tasks.ToArray());

        });
        Console.ReadKey();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM