C# 建模:具有依赖关系的并行队列

C# 建模:具有依赖关系的并行队列,c#,parallel-processing,queue,C#,Parallel Processing,Queue,我有一个相当复杂的设置,需要一些输入如何解决它 我有一个由任务1、2a、2b、2c、3a、3b、3c和4组成的过程a 任务1必须首先在没有其他任务并行的情况下运行 任务2a、2b、2c必须一个接一个地运行,但可以与3a、3b、3c并行执行(也必须一个接一个地运行)。任务4只能在3c和2c完成后运行 我首先通过优先级队列实现了这一点,并尝试使用优先级和一种机制来管理它,即只有2a和3a中的一种可以同时出列,2b和3b等等 但是,如果3a已经完成并且可以启动3b,它必须等到2a也完成。我需要一个队列

我有一个相当复杂的设置,需要一些输入如何解决它

我有一个由任务1、2a、2b、2c、3a、3b、3c和4组成的过程a

任务1必须首先在没有其他任务并行的情况下运行

任务2a、2b、2c必须一个接一个地运行,但可以与3a、3b、3c并行执行(也必须一个接一个地运行)。任务4只能在3c和2c完成后运行

我首先通过优先级队列实现了这一点,并尝试使用优先级和一种机制来管理它,即只有2a和3a中的一种可以同时出列,2b和3b等等


但是,如果3a已经完成并且可以启动3b,它必须等到2a也完成。我需要一个队列机制的想法,它可以如何处理我的情况。我知道这很复杂,但任何提示都可能对我有所帮助。

Whith
async
wait
您的解决方案如下所示(假设您有方法
Run…Async
来运行单个任务并返回任务):


如果你不想使用
async
/
wait
,你可以使用
Task.ContinueWith
来串行执行你的任务,而
Task.whalll
来并行执行。这是一个相当广泛的问题,你能缩小问题的范围并发布一些现有的代码吗?很难找到答案请简单回答。您需要在运行每个并行任务组后进行阻止。您可以使用WaitHandler进行阻止。请参阅msdn:
async Task RunTasks2Async() {
     await RunTask2aAsync();
     await RunTask2bAsync();
     await RunTask2cAsync();
}

async Task RunTasks3Async() {
     await RunTask3aAsync();
     await RunTask3bAsync();
     await RunTask3cAsync();
}

async Task RunAllTasks()
{
    await RunTask1();
    Task task2 = RunTasks2Async();
    Task task3 = RunTasks3Async();
    await Task.WhenAll(task2, task3);
    await RunTask4Async();
}