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

kcrjzv8t  于 2023-05-02  发布在  .NET
关注(0)|答案(1)|浏览(148)

此问题已在此处有答案

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 
};

理解上面的代码的不同之处以及哪个更好

agxfikkp

agxfikkp1#

Task.WhenAll已经在数组中返回结果,您似乎从第三个示例中了解到了这一点。你为什么要等第二次再拿呢?
另外,您不能第二次等待ValueTask s,it is explicitly mentioned by the documentation。因此,最好的情况是,你正在做非常低效的工作,最坏的情况是,你正在破坏你的任务工作流程。

相关问题