簡體   English   中英

Task.WhenAll是否在后台線程並行運行任務

[英]Does Task.WhenAll run Tasks in background thread parallel

以下2個代碼片段是否相同?

//--------------------------------------------------
1.
//--------------------------------------------------

var producer = Task.Run(async () =>
{
    await bar.ReadDataAsync();
});

var consumer = Task.Run(async () =>
{
    await bar.WriteDataAsync();
});


await Task.WhenAll(consumer, producer);

//--------------------------------------------------
2.
//--------------------------------------------------

await Task.WhenAll(bar.ReadDataAsync(), bar.WriteDataAsync());

Task.WhenAll不運行任務。 此方法不啟動任務。

什么Task.WhenAll 確實做的是回到一個新的Task 時,所有原始的任務已經完成,只有完成。

來自msdn

Task.WhenAll方法

.NET Framework 4.6和4.5

創建將在所有提供的任務完成后完成的任務。

https://msdn.microsoft.com/en-us/library/system.threading.tasks.task.whenall%28v=vs.110%29.aspx

在您的示例中,您調用了Task.Run 這是一個您希望異步運行工作單元的請求。 但是,不保證線程親和性。 這兩個工作單元可以同步運行 - 這取決於默認的TaskScheduler來決定。

Task.WhenAll沒有任何魔法 - 這是一種與其他方法一樣的方法。

因此,首先評估它的所有參數,然后才執行方法本身。 所以是的,你得到並行執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM