STh*_*mas 7 java future guava concurrent.futures
我知道Function的apply方法同步返回一个对象,AsyncFunction的应用程序异步运行并返回一个Future.
你能举个例子说明何时选择什么.
我看到的一个代码片段看起来像这样:
Futures.transform(someFuture, new AsyncFunction<A, B>() {
public B apply(A a) {
if (a != null) {
return Futures.immediateFuture(a.getData())
} else {
return Futures.immediateFailedFuture(checkException(());
}
});
});
Run Code Online (Sandbox Code Playgroud)
由于AsyncFunction内的值是立即返回的,为什么需要AsyncFunction呢?或者这只是我遇到的一个不好的例子?
Eti*_*veu 10
您找到的代码片段是一个错误的示例,因为它使用AsyncFunction来同步计算某些内容.这是不必要的冗长.
使用标准代码更清晰Function:
Futures.transform(someFuture, new Function<A, B>() {
public B apply(A a) {
if (a != null) {
return a.getData();
} else {
throw checkException();
}
});
});
Run Code Online (Sandbox Code Playgroud)
AsyncFunction当转换A到B的代码是异步时,您应该使用.在您的示例中,代码可能最初是异步的,后来更改为使用Futures.immediateFuture()/ Futures.immediateFailedFuture()由没有AsyncFunction用a 替换的程序员Function.或许他只是错过了重载方法.
既然AsyncFunction中的值作为立即结果返回,为什么这里需要AsyncFunction呢?或者这只是我遇到的一个坏例子?
小心。该代码段生成匿名类的实例并将该实例传递给该transform方法。该transform方法将使用AsyncFunction一个单独的线程。返回Future的链用于检索 的结果AsyncFunction并返回 的结果Future。这段代码仍然涉及到异步处理。
当您想要并且可以在执行其他任务时继续工作时,请使用异步处理。
| 归档时间: |
|
| 查看次数: |
8077 次 |
| 最近记录: |