如何记录 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));
这利用了基本上实现了 SuccessCallback
和 FailureCallback
接口的 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;
}
我有这样的代码片段
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));
这利用了基本上实现了 SuccessCallback
和 FailureCallback
接口的 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;
}