如何记录 ListenableFuture 返回类型?

How to log ListenableFuture returnType?

我有这样的代码片段

 public ListenableFuture<ProductCatalog> someAsync(List<someItem> someItemList) throws Exception {

    return ProductCatalog.someFunction()
            .executeAsync();
}

现在我想记录 header 我将从 ProductCatalog 获得的信息。我知道这是一个 asyncFunction,程序不会等待它的响应。但问题是我必须在不更改方法定义的情况下记录 header 。这个下面的执行会成功还是其他任何方式。我是 java.

中此异步功能的新手
    public ListenableFuture<ProductCatalog> someAsync(List<someItem> someItemList) throws Exception {

    ListenableFuture<ProductCatalog> Lp = ProductCatalog.someFunction().executeAsync();
    ProductCatalog productCatalog = Lp.get();
    productCatalog.getHeader();
    return Lp;
}

当您在 Future 上调用 get() 时,执行将阻塞,直到结果准备就绪或执行失败,因此这将中断您的调用(即它不再是异步的) .

但是,前缀“Listenable”表示您可以在未来添加监听器,例如像这样:

Lp.addCallback(product -> log(product.getHeader()), error -> log(error));

这利用了基本上实现了 SuccessCallbackFailureCallback 接口的 lambda。

您的方法将如下所示:

public ListenableFuture<ProductCatalog> someAsync(List<someItem> someItemList) throws Exception {
  ListenableFuture<ProductCatalog> Lp = ProductCatalog.someFunction().executeAsync();
  Lp.addCallback(product -> log(product.getHeader()), error -> log(error));
  return Lp;
}