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