协程:完成工作后无法返回值

时间:2019-06-12 14:01:41

标签: android kotlin-coroutines

在我的android应用中,我需要执行一些长时间的网络操作后才能返回结果(例如10秒后)

此处摘录:

import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

 GlobalScope.launch(Dispatchers.Main) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                return response
            }

但是我在这一行中遇到编译错误:

return response

错误消息:

'return' is not allowed here

1 个答案:

答案 0 :(得分:1)

它不是那样工作的。您的return不允许在那里,因为您在这些coroutine context上的{ }内部

但是实际上最好的方法是创建一些方法并处理该响应,而不是返回它。关于您的情况,我有些困惑:

转换:

GlobalScope.launch(Dispatchers.Main) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                return response
            }

进入:

GlobalScope.launch(Dispatchers.IO) {
                lateinit var response: Response<Void>
                response = executeOperations.await()
                 withContext(Dispatchers.Main){
                  handleResponse(response)
               }
            }

此外,您的繁重工作不会在Dispatchers.Main中发生,而是在Dispatchers.IO

中发生