【问题标题】:Asynchronous pattern - run task when previous task completed异步模式 - 在前一个任务完成时运行任务
【发布时间】:2015-01-03 02:19:08
【问题描述】:

我有点困惑我应该如何实现多个异步任务的工作流。例如 - Task1 开始,Task1 完成时,Task2 开始,Task2 完成时开始 TaskN 等等。
或者换句话说 - 异步任务如何通知“父”任务他的状态?我想可以在这里使用TaskStatus,但不确定具体如何。 我确实在 MSDN 上搜索过,但没有这种模式的完整示例。
附言我编辑我的问题以便专注于一个特定的问题。

【问题讨论】:

标签: c# design-patterns asynchronous


【解决方案1】:

如果你真的想等到 task1 完成后再启动 task2,一种方法是这样的:

Task<string> task1 = GetUsername();
string username = await task1; // blocks(or "waits") here until GetUsername returns

Task<string> task2 = GetConfig(username); // since we have the return from above, we can pass it here
string config = await task2 ; // blocks here until GetConfig returns

注意,此 Task1 和 Task2 不会彼此并行执行,因为我们明确地等待一个完成,然后再按照您的要求启动另一个。虽然它们相对于调用它们的线程是异步的。

如果您有 List&lt;Task&gt; 并希望按顺序执行它们,那么方法会有所不同,而并行执行它们将是另一种方法。

如果您查看 stackoverflow,您会看到很多使用 Wait、WaitAll、WhenAll 等方法的示例,这些方法可以让您做很多不同的事情组合。

【讨论】:

  • 是的,我真的需要等到上一个任务完成,因为它会将一些 ID 传递给需要下一个任务的数据库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多