gpt4 book ai didi

java - Google Guava 并发中 Futures.addCallBack() 和 Futures.transform() 的区别

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:20 26 4
gpt4 key购买 nike

Futures.addCallBack() 之间有什么区别?和 Futures.transform()Google Guava Concurrency .

根据文档:

Futures.addCallBack() :
addCallback(ListenableFuture<V> future, FutureCallback<? super V> callback)注册单独的成功和失败回调,以便在 Future 的计算完成时运行,或者如果计算已经完成,则立即运行。

Futures.transform() :
transform(ListenableFuture<I> input, AsyncFunction<? super I,? extends O> function)返回一个新的 ListenableFuture,其结果是从给定 Future 的结果异步派生的。

据我了解addCallback()异步处理完成后会注册成功或失败回调。在这种情况下,我们可以根据成功或失败条件(例如:日志记录、流量控制等)来处理输出。和 transform()只返回异步对象。所以区别只是回调?

  1. 我的理解是否正确?
  2. 哪个最适合用于异步处理?
  3. 如果我需要按顺序调用多个异步方法,是否有最佳实践?
  4. 使用 AsyncFunction 有什么区别?和 Functiontransform(ListenableFuture<I> input, Function/AsyncFunction <? super I,? extends O> function) ? (AsyncFunction 仅用于嵌套 Futures.transform() ?)

我尝试了什么:
我尝试编写如下代码,不管这是不是一个好习惯。

public ListenableFuture<MyObject> doSomething() {
logger.info( "Entered in dosomething() Method." );

ListeningExecutorService executor =
MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(50));

ListenableFuture<MyObject> myAsyncObject =
calculator.calculateSomething(input);
//internally calculator.calculateSomething() have multiple asynchronous
// calls and I am using Futures.transform(), without callback.

Futures.addCallback(myAsyncObject, new FutureCallback<MyObject>() {
public void onSuccess(MyObject result) {
logger.info( "Calculation Completed successfully." );
//TODO: check for success and log it.
}

public void onFailure(Throwable thrown) {
logErrorDetails(thrown);
}
}, executor);

executor.shutdown();

return myAsyncObject;
}

最佳答案

好吧,你没有在问题中写下完整的方法签名

  • addCallback 什么都不返回
  • transform 返回包含函数结果(如果输入成功)或原始输入失败(如果失败)的 future 。这允许使用流畅的语法进行链式转换。

我没有使用过 AsyncFunction,但我知道它们添加了一个级别的异步性,即 Future 的结果是另一个 Future .

关于java - Google Guava 并发中 Futures.addCallBack() 和 Futures.transform() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com