我有一个非常复杂的设置,需要一些输入如何解决它。
我有一个由任务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也完成。我需要一个可以处理我的情况的队列机制的想法。我知道这很复杂,但任何提示都可能对我有帮助。
答案 0 :(得分:0)
Whith async
和await
您的解决方案将如下所示(假设您有方法Run...Async
来运行您的个别任务并返回任务):
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();
}
如果您不想使用async
/ await
,可以使用Task.ContinueWith
执行任务的串行执行,并使用Task.WhenAll
执行并行执行。