我的问题确实是,是否有技术原因说明您应该或不应该使用 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
};
了解上面代码的不同,哪个更好
Task.WhenAll
已经返回数组中的结果,您似乎从第三个示例中知道了这一点。您为什么要等待第二次才能再次获得它们?
此外,您不能第二次等待
ValueTask
s,文档明确提到了。所以充其量你的工作效率很低,最坏的情况是你正在破坏你的任务工作流程。