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

如何不等得到一个活动的结果?以事件驱动的方式

汪正雅
2023-03-14

团队,我对并行调用活动有疑问。

我知道可以使用Async.function并行调用活动。

对于我的用例,我想在收到所有活动的结果后并行调用n个活动,我想进入下一个状态,它可以是另一个活动或决策任务。

但是在这里,它给了我一个promise对象,类似于java中的未来。如果我们编写 promise.get() 来获得结果,但它阻塞了线程。

我需要一些类似于事件驱动的时尚,而不会阻塞线程。

希望你理解我的问题!!

共有2个答案

袁谭三
2023-03-14

加上伟大的龙的回答。

您可以使用< code>Promise.anyOf以阻塞方式等待集合中单个promise的完成。

华知
2023-03-14

您不必使用.get()

在Promise中,您可以注册一个回调函数,以便在结果可用或返回错误时调用

您可以根据需要使用以下方法之一:

  • 然后应用
  • 处理
  • 然后复合
  • 异常

这种风格类似于Java的CompletableFuture。


  /**
   * Returns Promise that contains a result of a function. The function is called with the value of
   * this Promise when it is ready. #completeExceptionally is propagated directly to the returned
   * Promise skipping the function.
   *
   * <p>Note that no blocking calls are allowed inside of the function.
   */
  <U> Promise<U> thenApply(Functions.Func1<? super V, ? extends U> fn);

  /**
   * Returns Promise that contains a result of a function. The function is called with the value of
   * this Promise or with an exception when it is completed. If the function throws a {@link
   * RuntimeException} it fails the resulting promise.
   *
   * <p>Note that no blocking calls are allowed inside of the function.
   */
  <U> Promise<U> handle(Functions.Func2<? super V, RuntimeException, ? extends U> fn);

  /**
   * Returns a new Promise that, when this promise completes normally, is executed with this promise
   * as the argument to the supplied function.
   *
   * @param fn the function returning a new Promise
   * @param <U> the type of the returned CompletionStage's result
   * @return the Promise that completes when fn returned Promise completes.
   */
  <U> Promise<U> thenCompose(Functions.Func1<? super V, ? extends Promise<U>> fn);

  /**
   * Returns a new Promise that, when this promise completes exceptionally, is executed with this
   * promise's exception as the argument to the supplied function. Otherwise, if this promise
   * completes normally, then the returned promise also completes normally with the same value.
   *
   * @param fn the function to use to compute the value of the returned CompletionPromise if this
   *     CompletionPromise completed exceptionally
   * @return the new Promise
   */
  Promise<V> exceptionally(Functions.Func1<Throwable, ? extends V> fn);
 类似资料: