c# - 异步模式 - 当上一个任务完成时运行任务

标签 c# design-patterns asynchronous

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

最佳答案

如果您确实想等到任务1完成后再启动任务2,一种方法是这样的:

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

请注意,此任务 1 和任务 2 不会彼此并行执行,因为按照您的要求,我们明确等待一个任务完成后再启动另一个任务。尽管它们相对于调用它们的线程是异步的。

如果您有 List<Task>并希望按顺序执行它们,那么方法会有所不同,而并行执行它们将是一种不同的方法。

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

关于c# - 异步模式 - 当上一个任务完成时运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27751113/

相关文章:

javascript - 如何通过模块模式制作子模块

node.js - 使用 supertest 和 async.parallel 发送并行 http 请求?

javascript - 在递归函数中异步每个系列

c# - 我应该将 XSLT 文件放在我的 ASP.NET Web 应用程序的 App_Data 文件夹中吗?

c# - 使用 C# 的 IDM(Internet 下载管理器)API?

c# - 并发字典的使用

c# - 如何正确返回列表项进行编辑?

c# - 为什么我们需要在 Html.BeginForm 中使用@using

java - 接口(interface)如何打破类的依赖关系?

javascript - 异步函数 'post-cleanup'