Да, немного разное. Но обычно коллектор в отдельном ланче запускается.
наверно, даже не знаю, it depends всё же
* collect - после него операция выполниться только если не будет ошибки, если надо и когда ошибку - нужен try
* onCompletion - вызовется и при завершении с ошибкой и без и передаст ошибку в lambda, и потом, когда вызовется collect будет та же схема что сверху
* launchIn - запустит в другом scope - и там уже в другом месте можно проверить, завершился с ошибкой или нет и доставать ошибку уже не так прям приятно)
вот