组织异步任务

Dav*_*001 0 .net c# task-parallel-library

我有三个任务A,B,C.

B必须在C之前运行,但A可以与它们并行运行.这是最近改变的逻辑,我们目前的逻辑工作正常,我只是想知道我们目前有什么更好的解决方案:

public void RunTasks(...) {
    Action<IRunnableTask> runner = task => 
    {
        if (task.ShouldRun(request))
        {
            task.Run(request, response);
        }
    };

    // run parallel tasks
    Parallel.ForEach(parallelTasks, runner);

    // run serial tasks
    Array.ForEach(serialTasks, runner);
}
Run Code Online (Sandbox Code Playgroud)

这里,A和B是并行任务,C在串行任务列表中.问题在于,代码将在C可以启动之前等待A完成,这是不必要的.

那么,有一个很好的清洁解决方案,还是我需要开始回调和什么?

ste*_*ead 6

您可以使用TPL中的任务.

您可以同时运行任务B和A,然后将任务C作为任务B的延续运行

例如

Task.Factory.StartNew(()=>TaskA());
Task.Factory.StartNew(()=>TaskB()).ContinueWith(t=>TaskC(t));
Run Code Online (Sandbox Code Playgroud)

在TaskB的继续中,您可以传递Task以获取TaskB传递给TaskC方法的任何结果.