Смущает насчет Kotlin сопрограмм - PullRequest
1 голос
/ 16 июня 2020

Здесь нет ошибки компиляции:

suspend fun test() {
    runBlocking {

    }
}

Это имеет ошибку компиляции:

suspend fun test() {
    launch {

    }
}

Неразрешенная ссылка. Ни один из следующих кандидатов не подходит из-за несоответствия типа получателя: publi c fun CoroutineScope.launch (context: CoroutineContext = ..., start: CoroutineStart = ..., block: suspend CoroutineScope. () -> Unit): Задание определено в kotlinx.coroutines

Я действительно не понимаю, в чем проблема ...

1 Ответ

1 голос
/ 16 июня 2020

Сопрограммы запускаются с launch построителем сопрограмм в контексте некоторого CoroutineScope :

fun test() = CoroutineScope(Dispatchers.Main).launch {
}

launch - это расширение функция на объекте CoroutineScope, она определена вот так:

public fun CoroutineScope.launch(...): Job {}

runBlocking - не является функцией расширения, поэтому ее можно вызывать как обычную функцию , это определяется вот так:

public fun <T> runBlocking(...): T {}
...