异步模式 - 在上一个任务完成时运行任务

时间:2015-01-03 02:19:08

标签: c# design-patterns asynchronous

我有点困惑,我应该如何实现多个异步任务的worklflow。例如 - Task1启动,当Task1完成,Task2启动,Task2完成启动TaskN等。
或者另一个词 - 异步任务如何通知" parent"关于他的身份的任务?我想可以在这里使用TaskStatus,但不确定具体如何。 我在MSDN上搜索过,但没有这种模式的完整例子 附:我编辑我的问题是为了专注于一个特定的问题。

1 个答案:

答案 0 :(得分:5)

如果你真的想在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<Task>并希望按顺序执行它们,那么方法会有所不同,并行执行它们将是一种不同的方法。

如果你环顾一下stackoverflow,你会看到很多使用Wait,WaitAll,WhenAll等方法的例子,可以让你做很多不同的事情。