Kotlin中的异步常规程序

时间:2018-10-12 10:10:08

标签: asynchronous kotlin coroutine

我从不在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) {

            }
}

1 个答案:

答案 0 :(得分:1)

您应该使用的模式是async/await

它将从Deferred返回一个async { },您可以使用它来调用await()。由于buttonChange似乎需要UI上下文,因此您可能还需要启动协程。

launch(UI) {
    try {
        val result = async { me.connect("disconnection") }
        buttonChange(result.await())
    } catch (_: Exception) { }
}

您不应手动创建线程。