c# - 并行运行时任务变慢

标签 c# multithreading task

我很难理解这段代码的原因:

// 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 秒。变量 tasks 的类型为 Task[]

数组中有十几个任务,每个任务执行时间为500-1000ms。没有 CPU 限制,因为任务只是向服务器发送 HTTP 请求。

enter image description here enter image description here

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

最佳答案

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

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

现在它的运行速度与 #1 示例一样快,但也能在所有请求完成之前正确等待。

关于c# - 并行运行时任务变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766537/

相关文章:

java - Java中的多线程Web爬虫

c# - 使用 Task.WhenAll 执行多个任务时 foo.Start() 出现错误

c# - 如何将 Gtk.Frame 的标签设为粗体?

c# - 打开带附件的默认电子邮件程序 (C#)

c# - MVC 访问应用程序设置

django - 使用 django 和 celery 运行周期性任务

java - Gradle:从子项目复制 application.properties 文件

c# - 如何在没有单点登录的情况下使用 Azure AD

python - 使用线程保持 FTP 控制端口处于事件状态

Java字数统计: a mediocre implementation