簡體   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