Task.WhenAll 具有不同的结果 - 并行执行任务 C# [重复]

问题描述 投票:0回答:1

我的问题确实是,是否有技术原因说明您应该或不应该使用 Task.WhenAll()?当我喜欢这两个任务并行运行时,这只是一种偏好吗?或者只使用两个等待任务,而不是 WhenAll。

我可以知道两者之间有什么不同吗

var aTask = aService.GetAContentAsync(request.Language);

var bTask = bService.GetBContentAsync(request.Language);

await Task.WhenAll(aTask, bTask);

var aResponse = aTask.Result;
var bResponse = bTask.Result;

var response = new Content
{
   Title = aResponse ,
   Details = bResponse 
};

var aTask = aService.GetAContentAsync(request.Language);

var bTask = bService.GetBContentAsync(request.Language);

await Task.WhenAll(aTask, bTask);

var aResponse = await aTask;
var bResponse = await bTask;

var response = new Content
{
   Title = aResponse ,
   Details = bResponse 
};

或者更好的做法如下

var aTask = aService.GetAContentAsync(request.Language);

var bTask = bService.GetBContentAsync(request.Language);

var allTasks = await Task.WhenAll(aTask, bTask);

var aResponse = allTasks[0];
var bResponse = allTasks[1];

var response = new Content
{
   Title = aResponse ,
   Details = bResponse 
};

了解上面代码的不同,哪个更好

c# .net asynchronous async-await parallel-processing
1个回答
1
投票

Task.WhenAll
已经返回数组中的结果,您似乎从第三个示例中知道了这一点。您为什么要等待第二次才能再次获得它们?

此外,您不能第二次等待

ValueTask
s,文档明确提到了。所以充其量你的工作效率很低,最坏的情况是你正在破坏你的任务工作流程。

© www.soinside.com 2019 - 2024. All rights reserved.