<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Урок 3. Корутины. Suspend функции</title>
		<description>Обсуждение Урок 3. Корутины. Suspend функции</description>
		<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html</link>
		<lastBuildDate>Sat, 18 Apr 2026 20:12:15 +0300</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="https://startandroid.ru/ru/component/jcomments/feed/com_content/596.html" rel="self" type="application/rss+xml" />
		<item>
			<title>RE: Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1081</link>
			<description><![CDATA[Нужно декомпилировать байткод Kotlin в Java и увидите наглядную разницу]]></description>
			<dc:creator>Mark</dc:creator>
			<pubDate>Fri, 18 Oct 2024 19:56:29 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1081</guid>
		</item>
		<item>
			<title>RE: выполнение синхронного кода так, чтобы он не блокировал поток</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1022</link>
			<description><![CDATA[В уроках 24 и 25 примеры с withContext.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Mon, 05 Aug 2024 19:43:10 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1022</guid>
		</item>
		<item>
			<title>выполнение синхронного кода так, чтобы он не блокировал поток</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1009</link>
			<description><![CDATA["О том, как в корутине выполнять синхронный код так, чтобы не блокировать поток корутины, мы поговорим позже, когда будем рассматривать билдеры." Подскажите, а где этот пример?]]></description>
			<dc:creator>Mike</dc:creator>
			<pubDate>Thu, 11 Jul 2024 00:14:45 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1009</guid>
		</item>
		<item>
			<title>RE: Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1008</link>
			<description><![CDATA[Да, последовательно. Но при этом suspend функция под капотом может сходить в другой поток, чтобы выполнить тяжелую задачу. А в корутине все будет последовательно, и никаких колбэков.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Mon, 08 Jul 2024 11:48:18 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1008</guid>
		</item>
		<item>
			<title>Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1007</link>
			<description><![CDATA[Не понимаю в чем отличие запуска из корутины обычных и suspend функций. Например: launch { val file = download(url) unzip(file) } Код ведь выполнится последовательно независимо от того будет функция download обычной или suspend]]></description>
			<dc:creator>Олеся</dc:creator>
			<pubDate>Thu, 04 Jul 2024 10:50:53 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1007</guid>
		</item>
		<item>
			<title>Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1006</link>
			<description><![CDATA[Не понимаю в чем отличие запуска из корутины обычных и suspend функций. Например: launch { val file = download(url) unzip(file) } Код ведь выполнится последовательно независимо от того будет функция download обычной или suspend]]></description>
			<dc:creator>Олеся</dc:creator>
			<pubDate>Thu, 04 Jul 2024 10:50:53 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-1006</guid>
		</item>
		<item>
			<title>RE: А в чём проблема ненадолго заблокировать поток корутины?</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-938</link>
			<description><![CDATA[В том, что у вас к примеру UI зависнет(если он у вас есть). А если мы говорим о дроиде - тогда приложение вылетит с соответствующим исключением.]]></description>
			<dc:creator>Игорь</dc:creator>
			<pubDate>Fri, 16 Feb 2024 01:34:51 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-938</guid>
		</item>
		<item>
			<title>return suspendCoroutine</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-655</link>
			<description><![CDATA[В следующих уроках есть ответ на ваш вопрос.]]></description>
			<dc:creator>Тимофей</dc:creator>
			<pubDate>Sat, 03 Dec 2022 12:50:25 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-655</guid>
		</item>
		<item>
			<title>return suspendCoroutine</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-654</link>
			<description><![CDATA[Добрый день! Не совсем понял, зачем мы используем return, когда вызываем return suspendCoroutine, и как он нам возвращает результат, и главное, что он нам возвращает, когда мы ее только запустили - коллбэк еще не отработал, результата нет, что будет получено по return из suspendCoroutine ? Судя по сигнатуре, вызывающей suspendCoroutine функции, вернуться должен в любом случае File, но понять это пока не получается. Давайте я сначала напишу, что я понял - может это сократит Вам время на объяснение того, что я не понял). Итак у нас есть некая API, которая умеет ходить в сеть в другом потоке ( чтобы не тормозить основной поток из которого она вызывается) и в коллбэке возвращает файл - это в общем довольно частое поведение API в Java. Мы хотим обернуть ее в suspend-функцию. Для этого мы создаем по сути, функцию-обертку suspend fun download(url: String): File { } из которой вызываем нашу функцию networkService.download(url, object: NetworkService.Callback { override fun onSuccess(result: File) { } }) и в которой в функции onSuccess, то есть когда мы получили File, вызываем continuation.resume от объекта continuation, который получили на входе блока, для того, чтобы наша корутина смогла перескочить на следующий блок switch - тут все ясно, благодаря Вашему прошлому уроку.)]]></description>
			<dc:creator>Damir</dc:creator>
			<pubDate>Sun, 20 Nov 2022 17:47:10 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-654</guid>
		</item>
		<item>
			<title>Отмена синдрома самозванца</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-648</link>
			<description><![CDATA[мне кажется этот раздел полезен, если вы много работаете с легаси кодом. В retrofit и room suspend выведены наружу, и работать с suspendCoroutine там просто не зачем. Но, наверное, в качестве общего развития почитать можно было]]></description>
			<dc:creator>Георгий</dc:creator>
			<pubDate>Wed, 02 Nov 2022 15:47:02 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-648</guid>
		</item>
		<item>
			<title>синдром самозванца</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-647</link>
			<description><![CDATA[Честно говоря мало что понял из сказанного. Может быть я просто всегда использую suspend как функцию возвращающую результат и вообще не использую в коде suspendCoroutine? У нас нет легаси и о его существовании, я кажется узнал только что)) Весь урок как вода на одном дыханье, но наверное кто-то это использует :sigh:]]></description>
			<dc:creator>Георгий</dc:creator>
			<pubDate>Wed, 02 Nov 2022 15:38:53 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-647</guid>
		</item>
		<item>
			<title>А как купить курс???</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-536</link>
			<description><![CDATA[А как купить курс???]]></description>
			<dc:creator>Григорий</dc:creator>
			<pubDate>Thu, 25 Nov 2021 18:10:44 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-536</guid>
		</item>
		<item>
			<title>Иван</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-418</link>
			<description><![CDATA[Можем либо withcontext либо suspend функцию высшего порядка thread{}, я прав? А вообще вопрос касался этого предложения: "О том, как в корутине выполнять синхронный код так, чтобы не блокировать поток корутины, мы поговорим позже, когда будем рассматривать билдеры."]]></description>
			<dc:creator>Иван</dc:creator>
			<pubDate>Tue, 09 Mar 2021 03:04:54 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-418</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-416</link>
			<description><![CDATA[Ок, попробую перечитать урок и внести правки. По контракту suspend функция не должна блокировать поток корутины в которой она вызывается. Потому что корутина вполне может работать и в Main потоке (случай viewModelScope). Если из viewModelScope запускать suspend функцию, которая блокирует поток, то это заблокирует Main поток.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Fri, 05 Mar 2021 08:42:39 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-416</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-413</link>
			<description><![CDATA[Честно говоря меня ваши объяснения только запутали. Что плохого, если я из viewModelScope запущу suspend запрос, обращение к базе или просто супер долгий метод? Например, если это будет копирование файлов? Как будет верно вызвать такую функцию?]]></description>
			<dc:creator>Георгий</dc:creator>
			<pubDate>Wed, 03 Mar 2021 20:12:56 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-413</guid>
		</item>
		<item>
			<title>RE: suspendCoroutine</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-394</link>
			<description><![CDATA[Подскажи, о каком именно предложении в уроке идет речь, чтобы мне точно понимать. suspendCoroutine сам по себе не блокирует поток. В нем мы не должны писать блокирующий код. Можно только асинхронный с колбэками. А чтобы синхронный код увести в другой поток, можно использовать withContext. Об этом есть немного в уроке 17 и далее уже в практических уроках.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Wed, 03 Feb 2021 00:34:35 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-394</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-392</link>
			<description><![CDATA[:D]]></description>
			<dc:creator>Александр</dc:creator>
			<pubDate>Fri, 29 Jan 2021 18:08:00 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-392</guid>
		</item>
		<item>
			<title>Иван</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-391</link>
			<description><![CDATA[вроде в теме про диспатчеры есть пример]]></description>
			<dc:creator>Иван</dc:creator>
			<pubDate>Fri, 29 Jan 2021 03:44:22 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-391</guid>
		</item>
		<item>
			<title>suspendCoroutine</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-390</link>
			<description><![CDATA[Дмитрий, ты сказал что в уроке про билдеры расскажешь как правильно писать suspend функцию что бы suspendCoroutine не блокировал поток. Но в уроке про билдеры я не нашел примера про suspendCoroutine, там только примеры билдеров]]></description>
			<dc:creator>Иван</dc:creator>
			<pubDate>Fri, 29 Jan 2021 01:38:36 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-390</guid>
		</item>
		<item>
			<title>RE: Вопрос по синтаксису</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-352</link>
			<description><![CDATA[Спасибо.]]></description>
			<dc:creator>Михаил</dc:creator>
			<pubDate>Mon, 16 Nov 2020 10:12:57 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-352</guid>
		</item>
		<item>
			<title>RE: Вопрос по синтаксису</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-351</link>
			<description><![CDATA[Сергей все верно написал. Этот курс надо проходить, когда уже знаете Котлин. Поэтому сначала прочитайте основы, наберите немного практики и приходите за продвинутыми фишками)]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Sat, 14 Nov 2020 23:20:47 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-351</guid>
		</item>
		<item>
			<title>RE: Вопрос по синтаксису</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-350</link>
			<description><![CDATA[Михаил, в этом случае советую вам начать изучение Kotlin с какой-нибудь книги, например - Head First. Kotlin. Руководство для начинающих программистов. Изначально Дмитрий сразу сказал, что не будет разбирать основы языка Kotlin, а начнет с более важных тем.]]></description>
			<dc:creator>Сергей</dc:creator>
			<pubDate>Sat, 14 Nov 2020 22:29:57 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-350</guid>
		</item>
		<item>
			<title>Вопрос по синтаксису</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-349</link>
			<description><![CDATA[Я хочу купить курс, но боюсь не получить ответы на некоторые вопросы. Я достаточно хорошо знаком с Java и когда-то именно разрабатывал на ней. Весь этот сахар Kotlin... Поясните, пожалуйста, за структуру suspendCoroutine { continuation -> networkService.download(...) } Я не понимаю, как это читать (]]></description>
			<dc:creator>Михаил</dc:creator>
			<pubDate>Fri, 13 Nov 2020 12:52:37 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-349</guid>
		</item>
		<item>
			<title>RE: continuation.resume(result)</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-339</link>
			<description><![CDATA[В тех примерах все просто. Там нет асинхронного кода и поэтому не используется suspendCoroutine. continuation.resume надо не забывать, когда используем suspendCoroutine.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Mon, 26 Oct 2020 18:14:51 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-339</guid>
		</item>
		<item>
			<title>continuation.resume(result)</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-334</link>
			<description><![CDATA[Dmitry Vinogradov, в уроках вы говорите, что всегда нужно не забывать вызвать в suspend функции continuation.resume(result), иначе корутина не пойдет дальше работать, но в документации: https://kotlinlang.org/docs/reference/coroutines/composing-suspending-functions.html#sequential-by-default В самом первом примере они возвращают результат из suspend функций без continuation.resume(result) и все работает. Не могли бы вы разъяснить этот момент. Заранее спасибо!]]></description>
			<dc:creator>redectoo</dc:creator>
			<pubDate>Thu, 15 Oct 2020 12:59:36 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-334</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-327</link>
			<description><![CDATA[Да, ретрофит сам уйдет в IO поток и вернется с результатом в поток корутины.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Thu, 17 Sep 2020 12:14:29 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-327</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-321</link>
			<description><![CDATA[Получается что можно безопасно делать suspend Retrofit запросы(добавлены в версии 2.6) из main без указания withContext(Dispatchers.IO) { retroCall() }?]]></description>
			<dc:creator>Sergey</dc:creator>
			<pubDate>Mon, 14 Sep 2020 10:04:57 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-321</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-269</link>
			<description><![CDATA[suspend функция точно должна выполнять свою работу в отдельном потоке, чтобы не блокировать поток, в котором она была вызвана. Это контракт. Вызывающий поток точно знает, что он не будет заблокирован ею. А значит можно безопасно делать такие вызовы даже в основном потоке.]]></description>
			<dc:creator>Dmitry Vinogradov</dc:creator>
			<pubDate>Sun, 03 May 2020 18:09:28 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-269</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-266</link>
			<description><![CDATA["suspend функция download не заблокирует поток, в котором она будет вызвана. Потому что свою работу она будет выполнять в отдельном потоке" - действительно или в отдельном потоке? Если это так, то какая разница синхронно или асинхронно? А вот если suspend выполняется в главном потоке, то вопросов нет]]></description>
			<dc:creator>Анна</dc:creator>
			<pubDate>Sat, 02 May 2020 02:15:10 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-266</guid>
		</item>
		<item>
			<title>RE: Урок 3. Корутины. Suspend функции</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-265</link>
			<description><![CDATA[А если выполнять в новом потоке, но синхронно?]]></description>
			<dc:creator>Анна</dc:creator>
			<pubDate>Sat, 02 May 2020 02:07:03 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-265</guid>
		</item>
		<item>
			<title>RE: А в чём проблема ненадолго заблокировать поток корутины?</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-223</link>
			<description><![CDATA[в том, что корутина может выполнятся в главном потоке]]></description>
			<dc:creator>Артём Афанасьев</dc:creator>
			<pubDate>Sat, 25 Jan 2020 00:24:57 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-223</guid>
		</item>
		<item>
			<title>А в чём проблема ненадолго заблокировать поток корутины?</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-218</link>
			<description><![CDATA[А в чём проблема ненадолго заблокировать поток корутины?]]></description>
			<dc:creator>Konopko</dc:creator>
			<pubDate>Sat, 11 Jan 2020 13:47:30 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-218</guid>
		</item>
		<item>
			<title>Delphian</title>
			<link>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-207</link>
			<description><![CDATA[используется билдер withContext - это suspend функция, а не билдер]]></description>
			<dc:creator>Vadim</dc:creator>
			<pubDate>Fri, 13 Dec 2019 10:48:57 +0300</pubDate>
			<guid>https://startandroid.ru/ru/29-course/kotlin/596-urok-3-korutiny-suspend-function.html#comment-207</guid>
		</item>
	</channel>
</rss>
