此问题已在此处有答案:
Why should I prefer single 'await Task.WhenAll' over multiple awaits?(6个回答)
Await on a completed task same as task.Result?(2个答案)
4天前关闭。
我真正的问题是,是否有技术上的原因,你应该或不使用任务。WhenAll()?当我希望这两个任务并行运行时,它是否只是一个首选项。或者只使用两个await任务,而不是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
};
理解上面的代码的不同之处以及哪个更好
1条答案
按热度按时间agxfikkp1#
Task.WhenAll
已经在数组中返回结果,您似乎从第三个示例中了解到了这一点。你为什么要等第二次再拿呢?另外,您不能第二次等待
ValueTask
s,it is explicitly mentioned by the documentation。因此,最好的情况是,你正在做非常低效的工作,最坏的情况是,你正在破坏你的任务工作流程。