как функция приостановки не блокирует основной поток? - PullRequest
3 голосов
/ 07 апреля 2020

Сопрограмма запущена на Dispatchers. Основное не блокирует основной поток, пока приостановлено. что это значит? поэтому, когда функция приостановки запущена в главном потоке, когда есть строки, занимающие больше времени, автоматически ли она назначается новому потоку? это сбивает с толку?

1 Ответ

0 голосов
/ 07 апреля 2020

Dispatchers.Main - это CoroutineContext, который отправляет сопрограмму в основной поток, но когда сама сопрограмма приостанавливается, то есть путем изменения контекста или потока или по какой-либо другой причине, тогда «основной поток становится свободным» и Continuation объект под капотом отвечает за продолжение выполнения после этого.

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

...