前段时间我发现了 Scala异步项目。问题是:在这方面有多么神奇 async
通过普通函数无法实现的块(没有宏扩展)?
让我们看一下介绍中的第一个例子:
import ExecutionContext.Implicits.global
import scala.async.Async.{async, await}
val future = async {
val f1 = async { ...; true }
val f2 = async { ...; 42 }
if (await(f1)) await(f2) else 0
}
我在上面的例子中看不到任何不能用纯Java编写的东西。这段代码完全相同:
import java.util.concurrent.*;
import java.util.function.Supplier;
// First define a helper method for creating async blocks:
public static <T> ForkJoinTask<T> async(Supplier<T> supplier) {
return new RecursiveTask<T>() {
@Override
protected T compute() {
return supplier.get();
}
}.fork();
}
ForkJoinTask<Integer> future = ForkJoinPool.commonPool().submit(() -> {
ForkJoinTask<Boolean> f1 = async(() -> true);
ForkJoinTask<Integer> f2 = async(() -> 42);
if (f1.join()) {
return f2.join();
} else {
return 42;
}
});
什么可以Scala async
那Java不行吗?也许在一些更复杂的情况下?我错过了什么?