Вы должны отправлять обновления о прогрессе на канале.Это позволит вызывающему абоненту прослушивать канал, используя тот диспетчер, который он хочет.
suspend fun operationWithIO(input: String, progressChannel: Channel<String>): String {
withContext(Dispatchers.IO) {
// ...
progressChannel.send("Done!")
progressChannel.close()
}
}
Вызывающий может использовать его, выполнив что-то вроде этого:
val progressChannel = Channel<String>()
someScope.launch {
operationWithIO(input, progressChannel)
}
// Remember the call to progressChannel.close(), so that this iteration stops.
for (progressUpdate in progressChannel) {
println(progressUpdate)
}