我从不在Kotlin中使用异步。我不确定我是否理解正确。
我需要方法buttonChange(result)等待线程完成以获取结果。
fun sendConnection(view: View) {
var result = ""
if (!connected) {
async {
val runnable = Runnable()
{
result = me.connect("connection")
}
val threadSend = Thread(runnable)
threadSend.start()
}
buttonChange(result)
}
catch (e: Exception) {}
} else {
try {
async {
val runnable = Runnable()
{
result = me.connect("disconnection")
}
val threadSend = Thread(runnable)
threadSend.start()
}
buttonChange(result)
} catch (e: Exception) {
}
}
答案 0 :(得分:1)
您应该使用的模式是async/await
。
它将从Deferred
返回一个async { }
,您可以使用它来调用await()
。由于buttonChange
似乎需要UI
上下文,因此您可能还需要启动协程。
launch(UI) {
try {
val result = async { me.connect("disconnection") }
buttonChange(result.await())
} catch (_: Exception) { }
}
您不应手动创建线程。