[英]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 秒才能執行。 變量tasks
是Task[]
類型。
陣列中大約有十幾個任務,每個任務需要 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.