Отличный ответ, мне не хватает такого рода базового объяснения, когда речь идет о сопрограммах.

аю Kotlin Coroutine и знаю, что он основан наsuspend функция. Но что делаетsuspend значит?

Сопрограмма или функция приостанавливается?

Изhttps://kotlinlang.org/docs/reference/coroutines.html

По сути, сопрограммы являются вычислениями, которые могут быть приостановлены без блокировки потока

Я слышал, что люди часто говорят «приостановить функцию». Но я думаю, что это сопрограмма, которая приостанавливается, потому что она ждет завершения функции? «приостановить» обычно означает «прекратить работу», в этом случае сопрограмма бездействует.

Должны ли мы сказать, что сопрограмма приостановлена?

Какая сопрограмма будет приостановлена?

Изhttps://kotlinlang.org/docs/reference/coroutines.html

Чтобы продолжить аналогию, await () может быть функцией приостановки (следовательно, также вызываемой изнутри блока async {}), которая приостанавливает сопрограмму до тех пор, пока не будут выполнены некоторые вычисления, и вернет свой результат:

async { // Here I call it the outer async coroutine
    ...
    // Here I call computation the inner coroutine
    val result = computation.await()
    ...
}

Он говорит: «это приостанавливает сопрограмму до тех пор, пока не будут выполнены некоторые вычисления», но сопрограмма похожа на легкую нить. Так что, если сопрограмма приостановлена, как вычисления могут быть сделаны?

Мы видимawait называется наcomputationтак что это может бытьasync это возвращаетDeferredЭто означает, что он может начать другую сопрограмму

fun computation(): Deferred<Boolean> {
    return async {
        true
    }
}

Цитата сказатьчто приостанавливает сопрограмму, Значит ли этоsuspend внешнийasync сопрограмма, илиsuspend внутреннийcomputation сопрограммная?

Есть лиsuspend значит, что в то время как внешнийasync сопрограмма ждет (await) для внутреннегоcomputation сопрограмма, чтобы закончить, это (внешнийasync сопрограммы) бездействует (отсюда и название suspend) и возвращает поток в пул потоков, а когда дочернийcomputation сопрограмма заканчивается, это (внешнийasync сопрограмма) просыпается, берет еще один поток из пула и продолжает?

Причина, по которой я упоминаю нить, заключается в том, чтоhttps://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html

Поток возвращается в пул во время ожидания сопрограммы, а когда ожидание завершено, сопрограмма возобновляется на свободном потоке в пуле

Ответы на вопрос(3)

Ваш ответ на вопрос