@noraltavir Я совершенно не понимаю, о каких гонках речь. Там нет многопоточности, всё работает на главном потоке. в onStart запускается корутина на Dispatchers.Main. В onStop выполняются два действия:
1. Отправляется сообщение в channelFlow
2. Вызывается job.cancel()
Как я это вижу. Корутина запущенная в onStart находится в состоянии suspended. Далее в канал отправляются данные. Далее корутина отменяется. И почему-то, корутина просыпаетя и получает данные из канала.
Я не знаю как ещё лучше объяснить.