Getting “Suspension functions can be called only within coroutine body” when calling withContext(Dispatchers.Main) inside a lambda

You can rewrite your bar function like this:

fun bar(completion: () -> Unit) {
    GlobalScope.launch(Dispatchers.IO) {
        suspendCoroutine<Unit> {
            val lambda = {
                it.resume(Unit)
            }
            foo(lambda)
        }
        withContext(Dispatchers.Main) {
            completion()
        }
    }
}

Leave a Comment