我正在尝试建立一些具有一些最小耦合的工作者,但我想使用C#async和任务.并非所有任务都是纯粹的异步(有些将是完全同步的).这样做的动机是我想创建一些执行业务逻辑的简单方法,并使用System.Threading.Tasks.TaskAPI将它们链接在一起以保留一些排序概念.基本上,我想创建第一个任务,注册一些延续,然后等待最终任务完成.
这是我构建的简单原型,看看我想做什么甚至可以工作:
void Main()
{
var worker = new Worker();
var work = worker.StartWork(1, 2000);
work.ConfigureAwait(false);
var final = work.ContinueWith(_ => worker.StartWork(2, 0))
.ContinueWith(ant => worker.StartWork(3, 1500));
var awaiter = final.ContinueWith(_ => Tuple.Create(_.Id, _.Status));
Console.WriteLine("\"final\" completed with result {0}", awaiter.Result);
Console.WriteLine("Done.");
}
// Define other methods and classes here
class Worker {
internal async Task StartWork(int phase, int delay) {
Console.WriteLine("Entering phase {0} (in Task {1}) with {2} milliseconds timeout.", phase, Task.CurrentId, delay);
if (delay > …Run Code Online (Sandbox Code Playgroud)