[英]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.