Async Co-Рутина в Котлине - PullRequest
       36

Async Co-Рутина в Котлине

0 голосов
/ 12 октября 2018

Я никогда не использую async в Kotlin.Я не уверен, правильно ли я понимаю.

Мне нужно, чтобы метод buttonChange (результат) ожидал завершения потока, чтобы получить результат.

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 голосов
/ 12 октября 2018

Шаблон, который вы должны использовать: async/await.

Он вернет Deferred из async { }, который вы можете использовать для вызова await().Поскольку buttonChange, похоже, нужен контекст UI, возможно, вам также потребуется запустить сопрограммы.

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

Не следует создавать поток вручную.

...