EA Async 在 JVM 中实现了 async-await 方法。
EA Async 在 JVM 中实现了 Async-Await 方法。它允许程序员以顺序方式编写异步代码。它受到 .NET CLR 上的 Async-Await 的深刻启发,详细信息请参阅 使用 Async 和 Await 进行异步编程。
开发者与许可证 ===== 此项目由 Electronic Arts 开发,并采用 BSD 3 条款许可协议。 示例 ======= #### 使用 EA Async ```java import static com.ea.async.Async.await; import static java.util.concurrent.CompletableFuture.completedFuture;
public class Store
{
public CompletableFuture buyItem(String itemTypeId, int cost)
{
if(!await(bank.decrement(cost))) {
return completedFuture(false);
}
await(inventory.giveItem(itemTypeId));
return completedFuture(true);
}
}
``` 在此示例中,Bank.decrement 返回 CompletableFuture<Boolean> ,而 Inventory.giveItem 返回 CompletableFuture<String> EA Async 重写了对 Async.await 的调用,使您的方法成为非阻塞方法。 这些方法看起来是阻塞的,但实际上已被转换为使用 CompletableFuture 继续执行的异步方法,以便在中间结果到达时继续执行。 #### 没有 EA Async 以下是没有 EA Async 的第一个示例。它略显不易读。
import static java.util.concurrent.CompletableFuture.completedFuture;
public class Store
{
public CompletableFuture<Boolean> buyItem(String itemTypeId, int cost)
{
return bank.decrement(cost)
.thenCompose(result -> {
if(!result) {
return completedFuture(false);
}
return inventory.giveItem(itemTypeId).thenApply(res -> true);
});暂无开放 Issues,或尚未同步最近议题。