ytyht226 / taskflow

taskflow是一款轻量、简单易用、可灵活扩展的通用任务编排框架,基于有向无环图(DAG)的方式实现,框架提供了组件复用、同步/异步编排、条件判断、分支选择等能力,可以根据不同的业务场景对任意的业务流程进行编排
Apache License 2.0
460 stars 84 forks source link

DagEngine中CountDownLatch的使用顺序优化 #4

Closed JKTerrific closed 1 year ago

JKTerrific commented 1 year ago

https://github.com/ytyht226/taskflow/blob/0b47256b5061eaae10042a90811f3c3ffe6516b2/taskflow-core/src/main/java/org/taskflow/core/DagEngine.java#L436

syncLatch.countDown(); 是否应该需要提前到finally的最开始进行执行。否则会出现无法正常结束DAG任务,一定需要等待到超时的情况

ytyht226 commented 1 year ago

https://github.com/ytyht226/taskflow/blob/0b47256b5061eaae10042a90811f3c3ffe6516b2/taskflow-core/src/main/java/org/taskflow/core/DagEngine.java#L436

syncLatch.countDown(); 是否应该需要提前到finally的最开始进行执行。否则会出现无法正常结束DAG任务,一定需要等待到超时的情况

image 红框中的部分都属于当前节点主逻辑之后的后处理逻辑,需要执行完才能将信号量减一尝试唤醒阻塞线程; “否则会出现无法正常结束DAG任务” -- 另外,这种情况指的是?

JKTerrific commented 1 year ago

最后一个wrapper阶段在执行到这句话之后就不会进行后续流程了
DagContextHolder.putOperatorResult(wrapper.getId(), wrapper.getOperatorResult());

JKTerrific commented 1 year ago

image image

ytyht226 commented 1 year ago

最后一个wrapper阶段在执行到这句话之后就不会进行后续流程了 DagContextHolder.putOperatorResult(wrapper.getId(), wrapper.getOperatorResult());

我这看着没问题,例子中3个节点依次串行执行,把你的代码分支提交下我看看? image image