当前位置: 首页 > 知识库问答 >
问题:

是否可以异步执行子工作流?

鲁才艺
2023-03-14

我正在尝试实现一个永久的工作流,它从阻塞直到消息被传递的活动开始(即Redis的BLPOP)。一旦完成,我想异步启动一个新的工作流来进行某种处理并立即返回ContinueAsNew

我尝试使用子工作流启动处理工作流。我观察到,我的父工作流在子工作流执行之前完成。除非我处理返回的未来,但我真的不想这样做。

正确的方法是什么?是否可以在工作流中启动新的常规工作流?此类操作是作为工作流的一部分还是在活动中实现?

提前谢谢你!

共有1个答案

何安宜
2023-03-14

解决方案是等待子工作流启动,然后完成或作为新的父工作流继续。

如果您使用Go Cadence客户端,则< code >工作流。ExecuteChildWorkflow返回ChildWorkflowFuture,它扩展了返回子工作流结果的< code>Future。它还具有GetChildWorkflowExectution方法,该方法返回一个< code>Future,一旦子进程启动,该方法就准备就绪。因此,要等待子工作流启动,可以使用以下代码:

f := workflow.ExecuteChildWorklfow(ctx, childFunc)
var childWE WorkflowExecution
// The following line unblocks as soon as the child is started.
if err := f.GetChildWorkflowExecution().Get(&childWE); err != nil {
   return err
}

子工作流已开始,工作流ID在< code>childWE中找到。ID并在< code>childWE中运行ID。RunID

爪哇的对应物是:

 ChildType child = Workflow.newChildWorkflowStub(ChildType.class);
 // result promise becomes ready when the child completes
 Promise<String> result = Async.function(child::executeMethod);
 // childWE promise becomes ready as soon as the child is started
 Promise<WorkflowExecution> childWE = Workflow.getWorkflowExecution(child);
 类似资料:
  • 问题内容: 我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是: 大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。 和 异步异常仅由于以下原因而发生: […] * Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是Virtu

  • 异步注解@Async,默认情况下是不生效的,需要的话可以启用. 该加载器有一个可选参数,线程池大小,默认是32,详情可以查阅org.nutz.aop.interceptor.async.AsyncAopIocLoader @IocBy( args={"*json","ioc/", "*anno","net.wendal.nutzbook", "*a

  • Node 库以多种方式处理异步功能。最常见的模式是 error-first callbacks,但是你还可能会遇到 streams、promises、event emitters、child processes, 或 observables。gulp 任务(task)规范化了所有这些类型的异步功能。 任务(task)完成通知 当从任务(task)中返回 stream、promise、event e

  • 问题内容: 如果我做 是一样的吗 ? 我想要我所有的东西,就像在8023端口上监听一样。 问题答案: 不,您需要将nohup分别添加到命令中。 建议这样的事情: 或者:

  • 我最近读到了Node的“worker_threads”模块,该模块允许在多个线程中并行执行Javascript代码,这对于CPU密集型操作非常有用。(注意:这些不是Chrome在浏览器中制作的web Worker) 我正在构建一个功能,我需要在不阻塞浏览器的情况下执行大量的Postgres INSERT。 问题是:在我实例化worker的Javascript文件中,不允许导入任何内容,包括本机节点

  • 问题内容: 假设我有这段代码 我想知道的是该函数是否将异步执行。 问题答案: 设完成为Call(执行者,未定义,«resolvingFunctions。[[Resolve]],resolvingFunctions。[[Reject]]»)。 如果完成是突然完成,则 令status为Call(resolvevingFunctions。[[Reject]],undefined,«completion。