2016-10-03 33 views
0

假设有4个任务T1,T2, T3,T4。他们被链接在一起T1.si() | T2.si() | T3.si() | T4.si()T3产生异步的进一步任务T30 .. T3n,如chord(T30,...,T3n)(reduce.s())。我事先不知道n(即,将产生子任务no的子任务T3i)。在芹菜工作流程中引入同步链式执行

我想要T4只有在完成所有T3i..T3n任务后才能执行。正如预期的那样,T3由于异步行为而立即返回,然后T4在和弦完成之前开始执行。

我可以添加一个同步任务,只是在T4之前执行T3.get(),但它会阻止其中一个工作进程。

有没有办法解决这个设计,以避免阻塞任务,或更好的设计?

+1

所以我认为这里最好的选择是改变你如何使用'chord'功能。而不是将'T3'和'T4'连接在一起,使用'T3'作为'chord'主体,'T4'作为'chord'回调。 –

回答

1

我会提高@詹纳 - 费尔顿的评论有点...

你可以这样调用它:

chain(T1.s(), T2.s(), T3.s(T4.s())) 

例如T4.s()作为参数之一传递给T3任务。

T3将自行运行chord本身,T4作为回调传递。