Строки из статьи:
Кроме того, DispatchedContinuation наследуется от абстрактного класса DispatchedTask, который в реализации языка программирования Java, является типом, реализующим интерфейс Runnable. Следовательно, DispatchedContinuation может выполняться в потоке! Разве это не круто? Когда указан CoroutineDispatcher, корутина преобразуется в DispatchedTask, который диспатчится для выполнения в потоке как Runnable!
Я не вижу, чтобы он реализовывал интерфейс Runnable, или это только к джаве относится? Он реализует SchedulerTask().
И в нем действительно есть метод run() но он не очень похож на метод run() из интерфейса Runnable.
И вообще эти строки точно достоверные? То есть если я в CoroutineScope указываю Dispatcher, то корутина преобразуется в DispatcherTask и выполняется в Runnable, а если я вместо диспатчера укажу CoroutineName только, то что тогда?
Нетерпится спросить block: () -> Unit, это и есть сама корутина получается? То есть, то что я в .launch{} передаю, это оно в конечном итоге сюда вместо block передается?
public actual inline fun Runnable(crossinline block: () -> Unit): Runnable =
java.lang.Runnable { block() }
foonfyrick, нет. Лямбда это функция без имени. То что там раннабл и тд вообще минорные детали реализации.
Корутина это не вот этот твой блок кода. Это более сложная вещь. Читай доку до просветления.
Когда ты делаешь Thread { ... }.start(), ты же не говоришь, что { ... } это поток, правильно? Так и здесь, есть билдеры корутин, launch, async, и тд, которые запускают корутину. В них ты передаешь suspend lambda, которая будет выполняться в контексте корутины. Саму "корутину" ты тут как бы и не видишь, она - это вся машинерия, которая позволяет выполнять асинхронный код, написанный в императивном стиле. Нет ни ключевого слова coroutine, ни класса Coroutine, который был бы тебе доступен, чтобы его потрогать. Есть suspend fun/lambda, и есть компиляторная магия, которая превращает вызовы suspend функций в гигантский конечный автомат с коллбеками(continuation). Говорят, что корутины можно рассматривать как легковесные потоки. Но на самом деле они не потоки.
Короче, несмотря на внешнюю простоту, это офигенно сложная концепция.