我很难理解这段代码的原因:
// 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 请求。
这对我来说没有任何意义。
最佳答案
我用@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/