小编jsa*_*rma的帖子

CompletionStage.thenCompose不按顺序执行

我正在尝试使用java 8 CompletionStages来串行执行2个异步方法,以便在第一个失败时不执行第二个异步方法.但是当我调用thenCompose时,传入的函数似乎在前一个函数完成之前开始(例如:两个函数错误地并行执行.这是代码:

  public CompletionStage<Graph> create(Payload payload) {
    CompletionStage<BlobInfo> fileFuture = createFile(payload);
    CompletionStage<Entity> metadataFuture = createMetadata(payload);
    return fileFuture
        .thenCompose(ignore -> metadataFuture)
        .thenApply(entity ->
            buildFromEntity(objectMapper, entity));
  }

  public CompletionStage<BlobInfo> createFile(Payload payload) {
    return CompletableFuture.supplyAsync(() -> {
      try {
        return
            storage.create(
                BlobInfo
                    .newBuilder(payload.bucket, payload.name)
                    .build(),
                payload.data.getBytes());
      } catch (StorageException e) {
        LOG.error("Failed to write to storage: " + e);
        throw new RequestHandlerException(StatusCode.SERVER_ERROR,
            "Failed to write to storage.");
      }
    });
  }


  public CompletionStage<Entity> createMetadata(Payload payload) {
    return CompletableFuture.supplyAsync(() -> createSync(payload));
  }

  private Entity …
Run Code Online (Sandbox Code Playgroud)

java java-8 completable-future

1
推荐指数
1
解决办法
378
查看次数

标签 统计

completable-future ×1

java ×1

java-8 ×1