将协程函数作为函数参数传递

时间:2019-03-16 10:20:20

标签: kotlin coroutine higher-order-functions

我需要将协程函数作为另一个函数的参数传递。例如:

private fun handleIt(here: Long, call: (hereId: Long) -> Unit) {
            call(here)
}

,然后从协程范围:

GlobalScope.launch {
                        handleIt(3) { viewModel.doThings(hereId) }
                    }

viewModel函数如下所示:

suspend fun doThings(hereId: Long) {
        withContext(coroutineContextProvider.io) {
            doSomething(hereId)
        }
    }

但是现在,我得到一个错误:“只能在协程体内调用悬浮函数。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

简单的解决方案是将代码块和handleIt功能都标记为暂停:

suspend fun handleIt(here: Long, call: suspend (hereId: Long) -> Unit) {
    call(here)
}