Task.WhenAll是否在后台线程并行运行任务
以下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
没有任何魔法 – 这是一种与其他方法一样的方法。
因此,首先评估它的所有参数,然后才执行方法本身。 所以是的,你得到并行执行。