Для значения по умолчанию этого параметра, должно ли это быть 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 или вызов кода, связанного с сопрограммами, от блокировки мировых обратных вызовов.