Когда я должен использовать `Dispatchers.Unconfined` против` EmptyCoroutineContext`? - PullRequest
0 голосов
/ 14 марта 2019

Когда уместно использовать Dispatchers.Unconfined против EmptyCoroutineContext?

Мой пример использования - я хочу создать API для перехвата сетевых вызовов.Я хочу предоставить необязательный параметр для управления диспетчером, на котором выполняется перехват.Для значения по умолчанию этого параметра это должно быть Dispatchers.Unconfined или EmptyCoroutineContext?

1 Ответ

1 голос
/ 15 марта 2019

Для значения по умолчанию этого параметра, должно ли это быть Dispatchers.Unconfined или EmptyCoroutineContext?

В большинстве случаев это Dispatchers.Unconfined.

EmptyCoroutineContext не имеет элементов, семантически это нулевой объект . Сборщики сопрограмм, такие как launch , определяют свое поведение для этого случая: If the context does not have any dispatcher nor any other ContinuationInterceptor, then Dispatchers.Default is used. Большую часть времени вам не следует использовать EmptyCoroutineContext, поскольку вы не используете нулевые или нулевые объекты.

Dispatchers.Unconfined отличается: он выполняет сопрограмму немедленно в текущем потоке, а затем возобновляет его в любом потоке с именем resume. Обычно он подходит для таких вещей, как перехват обычного не приостанавливающегося API или вызов кода, связанного с сопрограммами, от блокировки мировых обратных вызовов.

...