【问题标题】:Task.WhenAll and ContinueWithTask.WhenAll 和 ContinueWith
【发布时间】:2022-11-15 16:00:51
【问题描述】:

我的服务需要同时运行 Job1 和 Job2(为了性能)。当 Job1 和 Job2 都完成时,只有它会运行 Job3。 Job3 完成后,只运行 Job4。 Job4 完成后,只运行 Job5。如何确保 Job3 只能运行

这是我的代码。如何确保 Job3 只能在 Job1 和 Job2 完成后运行?我需要在这里添加ContinueWith 吗?

await Task.WhenAll(RunJob1(cancellation), RunJob2(cancellation));

RunJob3(cancellation);
await RunJob4(cancellation);
RunJob5(cancellation);

【问题讨论】:

  • 现有代码有什么问题?为什么不在 RunJob3 和 RunJob5 之前等待呢?

标签: c#


【解决方案1】:

就是这样:

await Task.WhenAll(RunJob1(cancellation), RunJob2(cancellation));

await RunJob3(cancellation);
await RunJob4(cancellation);
await RunJob5(cancellation);

当然,假设所有工作都是async

您不需要ContinueWith,因为await 调用会在继续之前保留代码。

【讨论】:

  • “假设所有工作都是async- 重要的不是async 关键字,而是它们返回Task"Task-like" 结果,因为你可以await 一个非async 方法,前提是它返回一个Task-like 结果-但是你不能 await 一个 async void 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 2017-02-28
  • 2013-10-06
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多