我想知道 Kotlin 是否可以取代我们当前处理异步代码的方式。现在,我们使用CompletableFutures
处理异步代码。下面是这种方法的一个例子:
public void onBalanceRequest(Client client, String name) {
db.fetchBalance(name)
.thenAccept(balance -> {
client.sendMessage("Your money: " + balance);
});
}
这里重要的一点是onBalanceRequest
从主线程调用,不得被阻塞。在内部,db.fetchBalance
运行异步操作并在完成时解析 future,因此给定的调用不会阻塞主线程。
在查看了有关协程的 Kotlin 文档后,我希望我们可以做一些类似于 JavaScript 的 async/await 的事情。例如,我们可以在 JavaScript 中执行以下操作:
async function onBalanceRequest(client, name) {
let balance = await db.fetchBalance(name);
client.sendMessage("Your money: " + balance);
}
现在,我尝试将现有的 API 连接到 Kotlin 项目:
private fun onBalanceRequest(client: Client) = runBlocking {
val money = db.fetchBalance(client.name)
client.sendMessage("Your money: $money")
}
suspend fun fetchBalance(player: String): Double? {
var result: Double? = null
GlobalScope.launch {
originalFetchBalance(player).thenAccept {
result = it
}
}.join()
return result
}
然而,自从我使用runBlocking
,执行onBalanceRequest
正在阻塞主线程。所以我问你,我是否可以用 Kotlin 实现类似于 async/await 的东西。
谢谢。