Эта функция вызывается из основного потока (в ответ на switchMap
на другом LiveData), и она запускает сопрограмму с Dispatchers.Main
(по умолчанию для viewModelScope
), так что это фактически откладывает действие в сопрограмме до тех пор, пока все остальные текущие задачи в очереди основного потока не будут завершены.
Иногда это полезно для быстрой визуальной индикации чего-либо для одного кадра.
В этом случае строка, непосредственно предшествующая сопрограмме, изменяет LiveData для индикатора загрузки. Поэтому может быть причина, по которой они хотят, чтобы индикатор загрузки имел возможность быть скрытым в пользовательском интерфейсе до обновления представления списка для задач. Возможно, на стороне пользовательского интерфейса это приведет к более изящному переходу.
Или другая возможность: в этой сопрограмме был длительный вызов функции приостановки, она была реорганизована, и они не смогли удалить сопрограмму. Это не первый раз, когда я сталкиваюсь с ошибкой или запахом кода в примерах.
Даже если это не случайно, это тот случай, когда действительно необходимо добавить комментарий в коде объяснить это, так как это неочевидно.