#suspend_fun — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #suspend_fun, aggregated by home.social.
-
Шпаргалка: Structured Concurrency и отмена корутин
Тема 1. Как выглядит Kotlin Coroutine без макияжа Тема 2. Kotlin suspend функции Тема 3. Kotlin Coroutine диспетчеры и потоки: где выполняются корутины? Что будет, если запустить тяжелую фоновую обработку данных, а пользователь закроет экран? Если мы не контролируем этот процесс, потоки продолжат работу, сжигая батарею, процессорное время и создавая утечки памяти. Для решения этой проблемы в Kotlin применяется концепция Structured Concurrency . Больше букав
https://habr.com/ru/articles/1068314/
#kotlin_coroutines #structured_concurrency #suspend_fun #job #CoroutineScope #CancellationException
-
Шпаргалка: Kotlin Coroutine диспетчеры и потоки: где выполняются корутины?
Тема 1. Как выглядит Kotlin Coroutine без макияжа Тема 2. Kotlin suspend функции Код Kotlin корутин выполняется в потоках , но важно понимать, что корутины не привязаны жестко к конкретным потокам. Их выполнение управляется диспетчерами (Dispatchers), которые определяют, в каком потоке или пуле потоков будет работать корутина. Как мы обсуждали в Как выглядит Kotlin Coroutine без макияжа при создании корутины создается объект Continuation, в котором содержится код, который выполняет корутина. Код делится на блоки - suspend-функции с помощью switch. Когда код доходит до suspend-функции она вызывается и в неё передается весь текущий объект Continuation и на этом это ответвление switch заканчивается. Suspend-функция по завершению своей работы вызывает метод resume у переданного ей объекта Continuation и таким образом начинается выполнение следующего ответвления switch'a. Мы всё это вспомнили не просто так: объект Continuation, который мы обсуждаем на всех этапах передается в специальной обёртке DispatchedContinuation. Именно на этой обертке и вызывается метод resume, который выделяет поток и вызывает resume у объекта Continuation. Исходя из изложенного выше мы можем понять механизм смены потока - он может меняться при каждом вызове метода resume у объекта DispatchedContinuation. Доступны следующие диспетчеры: