我遇到了异步工作流程的问题。 我有这个设计:
workflow1:
<div class="row">
<fieldset class="form-group col-sm-3">
<label for="a1">work phone</label>
<input id="a1" type="text" class="form-control" readonly="readonly">
</fieldset>
<fieldset class="form-group col-sm-3">
<label for="a2">location</label>
<input id="a2" type="text" class="form-control" readonly="readonly">
</fieldset>
<fieldset class="form-group col-sm-3">
<label for="a3">contractor</label>
<input id="a3" type="text" class="form-control" readonly="readonly">
</fieldset>
<fieldset class="form-group col-sm-3">
<label for="a4">job code description</label>
<input id="a4" type="text" class="form-control" readonly="readonly">
</fieldset>
</div>
(抛出NullPointerException来测试错误处理) start -> ScriptActivity1
workflow2:
-> end
(调用 workflow1 ) start -> CallActivity
我看到如果我将工作流部署为异步,如果 workflow1 失败, workflow2 永远不会结束,但这不会发生在它们被部署为同步。
此外,如果我仅执行workflow1,则无法正确显示相应的异常。
有谁知道如何处理这个问题?
答案 0 :(得分:0)
这一切都与线程模型的工作方式有关。 我想你的“测试”过程没有人工任务,这就是你遇到自己行为的原因。 同步进程在与启动器相同的线程上运行,直到它们达到等待状态(通常是消息侦听器,人工任务或信号侦听器)。因此,当您的工作流程1进程失败时,它将终止工作流程2。
当事情是异步时,工作计划就会启动你的被调用流程,它本质上是一个独立的过程(虽然确实有对其父项的引用)。当工作流1失败时,工作流2继续愉快地继续。
通常,您通过使用由异常路径上的信号throw事件触发的信号捕获边界侦听器来模拟您正在经历的行为。
如果您想要一个图解示例,请告诉我。