Передача функции сопрограммы в качестве параметра функции - PullRequest
0 голосов
/ 16 марта 2019

Мне нужно передать функцию сопрограммы в качестве параметра для другой функции.Например:

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 Ответ

2 голосов
/ 16 марта 2019

Простым решением было бы пометить блокировку и функцию handleIt как приостановку:

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