#1 Что такое корутина. Важные особенности || Курс по корутинам

Поділитися
Вставка
  • Опубліковано 6 лип 2024
  • Рассказываю про корутины, их основные особенности, сравниваю с потоками и показываю как начать их применять в коде.
    Курс создан при поддержке компании Revolut. Вакансии компании здесь bit.ly/3lz6zdh
    Автор - Кирилл Розов, Android разработчик 10 лет опыта в разработке
    🔗 Поддержать проект taplink.cc/android_broadcast/...
    🔗 Каналы "Android Broadcast" taplink.cc/android_broadcast
    🔗 Kotlin Coroutines kotlinlang.org/docs/coroutine...
    #Coroutines #Курс #Kotlin #AndroidBroadcast #программирование #android #андроид #КириллРозов #корутины
    0:00 Вступление
    0:17 История корутин
    1:49 Корутины в Kotlin
    3:43 Ключевые особенности корутин
    7:20 Кодинг
    16:20 Заключение

КОМЕНТАРІ • 136

  • @AndroidBroadcast
    @AndroidBroadcast  2 роки тому +2

    💰 Поддержать проект на Boosty boosty.to/androidbroadcast
    🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
    🔗 Telegram канал "Kotlin Broadcast" ttttt.me/android_broadcast

  • @buddaset4226
    @buddaset4226 2 роки тому +25

    Всех поздравляю с выходом данного курса. Спасибо Кириллу.

  • @ohhimark1627
    @ohhimark1627 2 роки тому +13

    Очень давно ждал и дождался, нужно было основательно познакомиться и изучить корутины, спасибо Кирилл!

  • @user-mg8nn7lh3z
    @user-mg8nn7lh3z 2 роки тому +7

    Огромная благодарность! Ждём новые видео) А тебе Кирилл терпения и вдохновения. Хорошее дело делаешь

  • @andrew3937
    @andrew3937 2 роки тому +19

    Спасибо большое. Ты не представляешь сколько человекочасов сэкономит этот курс. Ты герой. Как найду работу, стану патроном)

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Спасибо!

    • @dreimhold
      @dreimhold 5 місяців тому +1

      Ну что, уже работаешь?

    • @mozart3712
      @mozart3712 2 місяці тому

      @@dreimhold а ты? в тг списаться не хоч?

  • @user-ss8bc9fd6i
    @user-ss8bc9fd6i 2 роки тому +1

    Ура! Дождались) Спасибо!

  • @user-ky2bu1wl7n
    @user-ky2bu1wl7n 2 роки тому +1

    Спасибо большое за данный курс. Давно ждал)

  • @fliker2309
    @fliker2309 2 роки тому

    Ура! Очень рад, что курс наконец вышел 🙃

  • @inex550
    @inex550 2 роки тому +2

    На одном дыхании. Всё очень круто и понятно. Спасибо! :)

  • @user-by1id2ix4h
    @user-by1id2ix4h 2 роки тому +3

    Курс 🔥
    С корутинами работаю уже очень давно, но несмотря на это подметил для себя много интересных моментов

  • @lordraiden_do
    @lordraiden_do 2 роки тому +1

    огромное спасибо! очень круто смотреть такие ролики где все разжевывается!

  • @user-eo9gb1qq7n
    @user-eo9gb1qq7n 2 роки тому +1

    Спасибо Кирилл, знаем что далось нелегко, поэтому поддерживаем лайками)

  • @CaptainBuldog
    @CaptainBuldog Рік тому +2

    Спасибо за курс. Объясняешь очень доходчиво и понятно!

  • @Mr1nkoGnit0
    @Mr1nkoGnit0 2 роки тому

    Спасибо! С нетерпением жду продолжения.

  • @dzmitreydanilau4637
    @dzmitreydanilau4637 2 роки тому +4

    Супер, спасибо за урок

  • @buslovskiy
    @buslovskiy Рік тому +1

    Спасибо за детальное и простое объяснение. Круто получилось.

  • @whitewhisper870
    @whitewhisper870 2 роки тому

    Вижу долгожданный курс - ставлю 👍

  • @sergey30027
    @sergey30027 2 роки тому

    Спасибо, жду продолжения

  • @zgbnb
    @zgbnb 2 роки тому

    Миллион раз спасибо, наконец-то дождался я

  • @victorskurchik3233
    @victorskurchik3233 2 роки тому

    Супер! Спасибо за курс

  • @Vanchesable
    @Vanchesable 2 роки тому

    Спасибо за труды!

  • @emrlord-2620
    @emrlord-2620 2 роки тому

    Годнота ! Спасибо за контент!

  • @nazirjonmakhmadkulov371
    @nazirjonmakhmadkulov371 2 роки тому

    Спасибо за курс!

  • @morakdim5927
    @morakdim5927 2 роки тому

    Огонь 🔥, как раз начал изучать корутинки.

  • @mikhailgureev218
    @mikhailgureev218 2 роки тому

    пушка-топ, спасибо большое Кирилл

  • @telephon3208
    @telephon3208 Рік тому +14

    кажется ты путаешь Concurrent и Asynchronous. обычно противопоставляют Sync - Async и Concurrent - Parallel. асинхронные задачи могут выполняться одновременно

  • @zoompartyru
    @zoompartyru 2 роки тому

    Спасибо ! Отличная инфа!

  • @learn1839
    @learn1839 8 місяців тому

    спасибо за ваш курс, всё понятно и доступно

  • @sergiomatiash5977
    @sergiomatiash5977 2 роки тому

    Отличнейшее и всестороннее обозрение корутин. Респект🔥

  • @antonselitskiy8143
    @antonselitskiy8143 2 роки тому

    Супер, спасибо!

  • @sergeyly5438
    @sergeyly5438 2 роки тому +5

    Похоже мне ещё рановато знать корутины 😵.
    Огромное спасибо за курс, уверен он многим поможет

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +4

      Как минимум можно вернуться к нему позже, когда будете готовы

  • @wowus94
    @wowus94 2 роки тому +1

    Спасибо!

  • @isqanderche3062
    @isqanderche3062 2 роки тому +1

    Отлично! Это лучшее, что я видел по этой теме на русском

  • @user-fx7oz3vf5p
    @user-fx7oz3vf5p 2 роки тому +4

    Как хорошо когда мозг молодой ,детский ,,быстро все схватывает !!!! Я на второй минуте ,уже ничего не понимала,и вголовн звучали только два слова корутин и потоки ха-ха ,я сдох

  • @user-not_defined
    @user-not_defined 2 роки тому

    Спасибо огромное

  • @_chkMyStyle_
    @_chkMyStyle_ 7 місяців тому

    Спасибо за урок!

    • @AndroidBroadcast
      @AndroidBroadcast  7 місяців тому

      Если вам приносит пользу, то будем рад поддержке boosty.to/androidbroadcast

  • @ninh6907
    @ninh6907 2 роки тому

    спасибо!

  • @Lt-cg7cj
    @Lt-cg7cj Рік тому

    Спасибо) Смотрю в замедленной скорости, иначе не успеваю понимать

  • @user-jo4pu2tg3w
    @user-jo4pu2tg3w 2 роки тому

    Спасибо

  • @sytyluipes
    @sytyluipes 8 місяців тому

    Спасибо большое за урок, пока только слышал про корутины, трогаю котлин и андроид около дву недель😅

  • @maksonic_official
    @maksonic_official 2 роки тому +2

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

  • @MrPwnzrus
    @MrPwnzrus 2 роки тому

    лучший

  • @swamp2113
    @swamp2113 2 роки тому +5

    Не совсем понял момент с отменой корутин. 14:12
    Нам ведь не нужно проверять isActive, у нас два вызова суспенд методов -- doWork и delay. Проверка на отмену проводится при каждом вызове суспенд метода и после выхода из суспенд состояния? И ещё в самом суспенд состоянии, например, если мы вызовем delay(5_000) и через 2 секунды отменим джобу, она же отменится сразу?
    Спасибо за видос!

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +3

      Если после вызова остановки будет suspend функция, тогда да. Но если нет suspend вызовов, то лучше проверять руками. Например, считывание файла не остановится так как для него не используется suspend функции

  • @user-fw4zu1kd2z
    @user-fw4zu1kd2z 2 роки тому

    Top mega nice bro

  • @alexvisk8900
    @alexvisk8900 2 роки тому

    Спасибо больше за урок . Я пытаюсь понять, кокда гаоврят coroutine не блокирует поток
    вот например у меня есть suspend fun loadImage() который будет работать IO потоке (например DefaultDispatcher-worker-1) и будет 5 секунд ждать ответа от сервера, это значит что во время ожидания 5 секунд поток в коротром будет работать loadImage (DefaultDispatcher-worker-1 ) не будет заблокирован ? может выполнять другие задачи ? или палюбому DefaultDispatcher-worker-1 будет заблокировано пока ожидает ответа а когда говорится не блокирует поток имеются в виду в моём случе Dispatchers.Main котором он запущен
    fun main() {
    scope.launch((Dispatchers.Main)) {
    loadImage()
    }
    }
    suspend fun loadImage() {
    // thread DefaultDispatcher-worker-1
    withContext(Dispatchers.IO) {
    api.loadImage()
    }
    }

  • @ulugbeksattarov1367
    @ulugbeksattarov1367 2 роки тому

    👍🏻👍🏻

  • @HappyGameNikit
    @HappyGameNikit 2 роки тому +5

    11:28 "Запускаются они сразу после создания"
    Зависит от скоупа ведь
    Какие-нибудь main.immediate, unconfined диспатчеры сразу запустят
    А так корутина и на следующий кадр может запуститься

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Я имел ввидо что они не будут ждать вызова join или await

    • @HappyGameNikit
      @HappyGameNikit 2 роки тому

      @@AndroidBroadcast понимаю, это скорее просто уточнение для тех кому интересно.
      Спасибо за курс!)

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Main immediate запустит сразу только если уже выполняется корутина из главного потока

  • @beavissooqa7585
    @beavissooqa7585 Рік тому +2

    4:20 разве ключевое слово суспенд приостанавливает выполнение корутины?

  • @september669
    @september669 2 роки тому +1

    Хочу добавить уточнение к 5:25 - корутина освободит поток только если она не повисла на какой-нибудь системной блокировке ( к примеру на блокирующем IO)

  • @oleg12395
    @oleg12395 2 роки тому

    подскажите пожалуйста, а что это за конструкция val myList: List = List(100) { ...it... } что происходит в блоке кода после объявления размера листа ?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Документация - это лучший источник. kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-list.html

  • @pavelgulevich2675
    @pavelgulevich2675 2 роки тому +2

    Хм, я не джун, вроде неплохо представляю себе как работают потоки. Познания о корутинах на уровне - "легковесный поток". После кодинг сессии в видео я ничего не понял: где начинается корутина и где заканчивается; вроде стало понятно что такое GlobalScope, но при этом не понятно как связан runBlocking со Scope; в параметрах функции runBlocking идет CoroutineScope, а мы передаем корутину, почему? как между собой связаны все эти сущности и понятия? Возможно мало времени уделено базовым понятиям корутин.
    В общем, после просмотра серии больше вопросов, чем ответов для себя вынес. Тем не менее, спасибо Кириллу за старания и надеюсь, что по итогу всего курса данные вопросы структурируются.

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      В будущих уроках про все это будет подробнее

    • @vasiliychernov2123
      @vasiliychernov2123 2 роки тому

      >в параметрах функции runBlocking идет CoroutineScope, а мы передаем корутину, почему?
      В параметрах runBlocking передаётся не CoroutineScope, а блок кода, вызываемый на нём, CoroutineScope - receiver.

  • @alexiachimov9817
    @alexiachimov9817 2 роки тому +1

    Спасибо за урок, было очень интересно и познавательно, даже не смотря на то, что работаю с корутинами не первый год. На днях у меня появилась одна проблема в одном проекте, касательно взаимодействиях Rx кода с Корутинами, а точнее с runBlocking{...}. Не уверен что коменты к видео это подходящее место для таких вопросов :D . Что слышно насчёт Slack или Discord канала где можно в теории обмениваться опытом, беседовать на разные темы касающиеся Android разработки и где можно будет задавать интересующие вопросы?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      Есть чатик t.me/android_broadcast_talks

    • @alexiachimov9817
      @alexiachimov9817 2 роки тому +1

      @@AndroidBroadcast что то забыл о нём, спасибо, обязательно зайду в этот чат!

    • @AndroidBroadcast
      @AndroidBroadcast  Рік тому +1

      Напишите на kirill@androidbroadcast.dev все подробности о блокировке и ваш аккаунт в TG

  • @igoremelyanov9496
    @igoremelyanov9496 2 роки тому

    Спасибо за курс!
    1. Есть список всех будущих частей курса и расписание их выхода?
    2. Какие ресурсы посоветуешь для глубокого изучения устройства и работы корутин под капотом?

    • @sergey30027
      @sergey30027 2 роки тому

      Medium, статьи Елизарова

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +3

      Публично списка нет, но у меня он есть. Постараюсь привести его и выложить в Telegram канале.
      2. Я делал подборку ресурсов по изучению корутин и все туда сложил telegra.ph/Kak-izuchit-Kotlin-Coroutines-04-17

    • @igoremelyanov9496
      @igoremelyanov9496 2 роки тому

      @@AndroidBroadcast
      Спасибо! Именно то, что было нужно.
      Пошёл присоединяться в Telegram канал.

  • @v.yundin
    @v.yundin 2 роки тому

    Кто и по каким критериям решает, что корутину нужно приостановить и выполнить что-то другое? Это происходит при io операции или может произойти при любом вызове suspend функции?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      При вызове любой suspend функции происходит остановка. Корутина будет стараться максимально продолжить выполнение, если это возможно. Управляют переключением потоков Dispatcher-ы

  • @alaershov
    @alaershov 2 роки тому +1

    Отличное начало!
    Кажется что ты слишком сурово запрещаешь runBlocking, у него ведь есть вполне валидные кейсы использования. Например мы находимся в каком-нибудь OkHttp Interceptor и хотим подставить в запрос токен аутентификации, а наша APIшка обращения к хранилищу токена предоставляет только suspend функции. Но при этом мы уже находимся в фоновом потоке, никакой main не заблокируем. В общем, если GlobalScope не нужен действительно никогда, то у runBlocking всё-таки есть законные применения)

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      Да, но лучше максимально обезопасить для старта )))

  • @mikhailzaytsev4219
    @mikhailzaytsev4219 2 роки тому

    Спасибо за ролик, может стоит еще сделать текстовую версию?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      Да, она будет, но не хватает ресурсов на нее. Попробую кому-то делегировать адаптацию сценарию в статью, но пока думаю идея провалится

  • @oberon2k9
    @oberon2k9 2 роки тому

    Спасибо за курс!
    Возникает вопрос: будет ли про корутины и ретрофит?

    • @vasiliychernov2123
      @vasiliychernov2123 2 роки тому +1

      Достаточно добавить модификатор suspend к методам в интерфейсе и работать с ними как и с другими suspend-функциями, Retrofit поддерживает корутины из коробки c версии 2.6.0.

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

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

  • @matjon_dev
    @matjon_dev 2 роки тому

    Есть график выхода роликов про Coroutines?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +4

      До конца мая выйдет 5 роликов, потом тоже хочу все закрыть побыстрее. Стараюсь изо всех сил, времени не хватает ((

  • @ruborus
    @ruborus 2 роки тому

    Спасибо Кирилл, но для меня непонятно когда говоришь что котлин корутины не работают паралально.
    ведь таким образом f1 f2 буду работать параллельно
    val f1 = async (Dispatchers.Default) { loadImage() }
    val f2 = async (Dispatchers.Default) { loadImage() }

    doDomethinkgWith(f1.await(), f2.await())
    или если запустить два Globalscope.async{ } Globalscope. async{ }
    пожалуйста объясните

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      Параллельно они работают только на JVM, потому что там есть многопоточность. Корутины в классическом понимании - это про асинхронное выполнение, а не паралелльное

    • @ruborus
      @ruborus 2 роки тому

      @@AndroidBroadcast понятно спасибо)

  • @bolnoi8
    @bolnoi8 2 роки тому

    Наверно забегаю вперёд, но можно ли привязать корутину к жизненому циклу объекта? Т.е. теряем ссылку на объект, корутина останавливается, гарбаж коллектор уничтожает объект. Сейчас, кажется, что из-за запущенной внутри объекта корутины, гарбаж коллектор никогда не уничтожит наш инстанс и мы получим утечку памяти.

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому +1

      Корутина останавливается либо через вызов cancel, либо когда CoroutineScope останавливается. Сможет связать скоуп с временем существование объекта - получить результат, но изначально идея звучит как "то что не стоит делать"

  • @mikhailshirokov8464
    @mikhailshirokov8464 11 місяців тому

    Я правильно понимаю, что по сути корутины работают поверх некоего EventLoop (в Android - поверх Looper, привязанного к какому-либо потоку)? Т.е. когда мы к примеру вызываем suspend-функцию delay, под капотом в очередь сообщений EventLoop кладётся с указанной задержкой тот блок кода, который идёт после delay и до вызова следующей suspend-функции в корутине?

    • @AndroidBroadcast
      @AndroidBroadcast  11 місяців тому

      Отчасти похоже на Event Loop, но скорее они делятся все выполнение на шаги и когда происходит приостановка запоминают состояние, а потом продолжают выполнение с него. Это больше похоже на большой when где каждый элемент шаг выполнения

    • @mikhailshirokov8464
      @mikhailshirokov8464 11 місяців тому

      @@AndroidBroadcast к примеру delay приостанавливает выполнение на заданное кол-во миллисекунд, но поток при этом не блокирует (выполнение кода асинхронно продолжается на этом же потоке; к примеру если на однопоточном диспатчере запустить 2 корутины (допустим, с помощью билдера launch), и на обеих вызывать delay с разными задержками; они будут отрабатывать "параллельно", выполняясь при этом на одном потоке). Каким образом это удаётся сделать? Возможно, какой-то цикл событий всё же под капотом используется?

  • @jojomajo
    @jojomajo 2 роки тому

    Хахахахах аж неверится))) он вышел!)

    • @jojomajo
      @jojomajo 2 роки тому

      Ждуны дождались)

  • @sethwillen227
    @sethwillen227 2 роки тому

    Подскажите, пожалуйста, какая тема в идее стоит?

  • @olegf169
    @olegf169 Рік тому +1

    Как называется тема для среды разработки?)

    • @AndroidBroadcast
      @AndroidBroadcast  Рік тому

      Обычно использую Darcula

    • @olegf169
      @olegf169 Рік тому

      @@AndroidBroadcast благодарю)

  • @Vl-TV
    @Vl-TV Рік тому

    причем тут suspend и лаунч 13:47 и асинк и асинкевей че означает не понятно почему назвал авей

  • @antaki93
    @antaki93 11 місяців тому

    15:00 похоже, suspend-функция в отменённых корутинах не выполняется потому, что проверка isActive происходит автоматически, перед запуском suspend-функции (как ты в самом начале и описал)

  • @ekaterinaivanova9873
    @ekaterinaivanova9873 Рік тому

    нет гитхаба к лекциям или есть?

  • @berspoland5667
    @berspoland5667 9 місяців тому

    Интересно, что если тестить этот код через Kotlin Playground, то значения в консоли будут исключительно в порядке от 0 до 99 :)

    • @berspoland5667
      @berspoland5667 9 місяців тому

      Вписал код в IntelliJ IDEA, так же.. В консоли все цифры по порядку.... Почему же у тебя в примере не последовательно?

    • @berspoland5667
      @berspoland5667 9 місяців тому +1

      Нашел, оказывается, все дело в выборе кода задержки. При использовании Random с java.util действительно в разнобой, а если использовать delay от корутин, то только в строгом порядке.

  • @IvanIvanov-vs1mq
    @IvanIvanov-vs1mq Рік тому

    Что такое настоящие сопрограммы, парни и не знают. И не должны. Их использовали ещё до их рождения)))

  • @DiabloZq
    @DiabloZq 2 роки тому

    +

  • @dmitriymitroshin7525
    @dmitriymitroshin7525 2 роки тому

    Комментарий.

  • @user-lw9nu9ml8w
    @user-lw9nu9ml8w 2 роки тому +2

    Обьяните плз раницу между ассинхроностью и многопоточностью

    • @bolnoi8
      @bolnoi8 2 роки тому +1

      Поток, грубо говоря, представляет собой бесконечный цикл, каждую итерацию которго берется задача из списка задач и выполняется. Многопоточность - это использование более одного потока для выполнения задач.
      Асинхроность - характеризует порядок выполнения задач. Запуская асинхронную задачу мы не знаем когда она выполнится. Если запускаем несколько, мы не знаем в каком порядке они будут исполнены.

  • @kickout367
    @kickout367 2 роки тому

    Еще..

  • @timut1830
    @timut1830 2 роки тому +1

    Для любителей фундаментальности хочу порекомендовать лекцию, а лучше целый плейлист от Липовского: ua-cam.com/video/eBQi3Y2p_eQ/v-deo.html

  • @arhitutorials
    @arhitutorials 2 роки тому +2

    Что такое корутины? Берем условный FixedThreadPool, сабмитим туда 1000000 Runnable, и вот, мы запустили 1000000 корутин!)
    Это конечно слишком примитивное объяснение, тут дальше должна быть длинная речь про suspendable континуации и все такое. Но зато позволяет наглядно представить, суть потоков и корутин, и как они между собой соотносятся.

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Да, Сергей верно все представил

  • @user-not_defined
    @user-not_defined 2 роки тому

    На сколько я знаю runblocking нежелательно использовать в андроид, только в тестах для проверки корутин, он блокирует поток на котором вызывается ((

    • @user-not_defined
      @user-not_defined 2 роки тому

      @@igorm7480 он сказал что можно на основном но осторожно, хотя да

  • @user-zz4uj1mr5f
    @user-zz4uj1mr5f 3 місяці тому

    А.... а по человечески можно объяснить?)
    а зачем тогда нужны потоки если есть корутины?.

    • @AndroidBroadcast
      @AndroidBroadcast  3 місяці тому

      Без потоков никуда, это на уровне JVM и они лежат пол капотом Kotlin Coroutines

  • @alekseyyakovlev7287
    @alekseyyakovlev7287 2 роки тому +1

    Спасибо за курс! 👍
    Немного режет слух произношение слова suspend, в нем нет звука "У". Вот транскрипция [səˈspend].

  • @s_potam
    @s_potam 8 місяців тому

    "Логично, что если пользователь закрыл экран... то результат операции нам больше не нужен".
    Мда, при таком подходе конечно будет и колл-бек хел и трафик на бэке и много еще чего!
    Задача актуализации модели вообще никак не связана с показом конкретных данных на конкретной страничке! Если мы вообще об ООД говорим.
    Если задача состоит в банальном запросе от БД, то там прерывать просто нечего, а если запрос данных предполагает возможность создания целого пула задач актуализации, то вспоминаем о слоях и инкапсуляции.
    В андроидовской идеологии для показа данных должна формироваться view model. Пусть так. Данные для неё запрашиваются у слоя модели, и при таком запросе на уровне модели решается, есть ли актуальная версия запрашиваемых данных или должна пройти например синхронизация с сервером.
    Эта логика и её реализация в соответсвии с парадигмой инкапсуляции приватна для модели и не может быть объединена в один логический контекст ни с чем внешним. Это следует из элементарных принципов ООД.
    Ушёл на секунду с экрана, по любому поводу - экран детального вида, ответ на смс или ещё куда - что, прерывать синхронизацию данных и начинать заново? А вопросы обеспечения целостности данных, если тянем не через один запрос?
    Меня обоснования полезности корутин в оригинальной документации в этой части всегда веселили, за уши притянуто и рекламирует неграмотный подход к проектированию.

    • @AndroidBroadcast
      @AndroidBroadcast  8 місяців тому

      Это возможность привязывать корутину к жизни какого-то объекта. Она спокойной может продолжить операцию и дальше, просто это надо указывать явно

    • @s_potam
      @s_potam 8 місяців тому

      @@AndroidBroadcast Это был камешек в общем в огород корутин ;)
      Любой тезис из обычного набора обоснований преимуществ перед классическим подходом ИМХО далеко не однозначен и в основном цепляется за просчёты в архитектуре либо конкретного приложения, либо глобальной архитектуры Андроид приложения.
      Всё же мы не о FreeRTOS говорим и красота неблокирующего подхода в отдельно взятой песочнице - очень на любителя. ИМХО естественно.

  • @antonpopkov5003
    @antonpopkov5003 2 роки тому +2

    Без CoroutineStart.Lazy список тоже по очереди заполнился. Почему так?

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      Не понял вопроса, раскройте больше

    • @antonpopkov5003
      @antonpopkov5003 2 роки тому

      ​@@AndroidBroadcast Так, я невнимательно посмотрел видео и не про то спросил. У нас есть launch и async, но почему-то async не параллелит - список заполнился по-порядку

    • @AndroidBroadcast
      @AndroidBroadcast  2 роки тому

      @@antonpopkov5003 Нужно смотреть код. Скидывайте ссылку на Gist

    • @audiserg
      @audiserg 2 роки тому

      @@antonpopkov5003 потому что await вызывается по порядку. А по идее должен вызываться сразу на всех функциях, для этого там есть специальная функция awaitAll, жаль что Кирилл не акцентировал на этом внимание.

    • @alekseikuklov8609
      @alekseikuklov8609 Рік тому +1

      Потому что порядок выдачи результата определяется циклом list.forEach, а он всегда последовательный. Корутины стартуют одновременно, но результат выводится согласно list.forEach.
      list.forEach ждёт пока первая корутина выполнится, и печатает её. Потом переходит ко второй. Если вторая корутина к тому времени уже оказывается выполнена, то он печатает её сразу же, без ожидания, и переходит к третей.

  • @svarog66
    @svarog66 Рік тому

    Спасибо!

  • @mikhailshirokov8464
    @mikhailshirokov8464 2 роки тому

    Спасибо

  • @Chernov1984
    @Chernov1984 2 роки тому

    +

  • @user-ol2jd2tl7m
    @user-ol2jd2tl7m 10 місяців тому

    Спасибо