Task.whenall vs Task.GetAwaiter().GetResult() 在非常任务上

Task.whenall vs Task.GetAwaiter().GetResult() on very task

我是否使用以下方法创建了 Task

Task.Factory.StartNew<GroupPreferenceList>(())

并调用一个函数,就像我有 7 个方法,所有方法都包含一个或两个 API 调用。现在我正在使用: Task.GetAwaiter().GetResult() 在非常任务上获取非常任务的结果并对其进行一些操作。 我的问题是我是否应该创建另一个并使用 WhenAll() 或者我正在做的是正确且更快的。

谢谢

这方面有几点:

  • 使用 Task.Run<GroupPreferenceList>(()) 而不是 Task.Factory.StartNew<GroupPreferenceList>(()),这是 Stephen Cleary StartNew is Dangerous
  • 提供的有用信息
  • 除此之外你为什么需要 Task.GetAwaiter().GetResult(),我可以理解在等待的任务上使用 GetAwaiter(),但这在这里没有用例。此外,每个调用都将在主线程上进行,从而消除了并发和等待获取每个已执行任务结果的好处
  • 当您想为所有任务集合获取单个代表任务并等待它时,您可以使用 WhenAll()

在这种情况下我的建议是:

  • 只需使用 Task.Run 为每个任务创建一个任务集合
  • 执行 Task.WaitAll 以等待它们中的每一个完成,然后访问任务对象的每个 Result 调用的结果,前提是您使用通用版本作为基础 class Task 的人没有。

上面的回答是在你需要TPL处理的前提下,如果是IO并发,那就把complete call转成Async-Await,因为这样最适合IO并发