Если я вызываю функцию приостановки, сопрограмма должна быть приостановлена. Но как я могу использовать это, чтобы приостановить отправку SharedFlow?
fun main()= runBlocking {
println("before, time is ${System.currentTimeMillis()/1000} s")
delay5s()
println("after, time is ${System.currentTimeMillis()/1000} s")
}
private suspend fun delay5s() {
delay(5000)
}
код будет работать корректно. Но когда я пробую это в SharedFlow.
fun main()= runBlocking {
val flow = MutableSharedFlow(
replay = 0,
extraBufferCapacity = 0,
onBufferOverflow = BufferOverflow.SUSPEND
)
launch {
flow.collect {
println("before on collect, time is ${System.currentTimeMillis()/1000} s")
delay5s()
println("after on collect, time is ${System.currentTimeMillis()/1000} s")
}
}
launch {
println("before emit, time is ${System.currentTimeMillis()/1000} s")
flow.emit(1)
println("after emit, time is ${System.currentTimeMillis()/1000} s")
}
}
Я понял
before emit, time is 1733335171 s
before on collect, time is 1733335171 s
after emit, time is 1733335171 s
after on collect, time is 1733335176 s
Как видите, заблокирован только коллектор. Вызовы «до и после эмиссии» происходят почти одновременно.
Я ожидаю
before emit, time is 1733335171 s
before on collect, time is 1733335171 s
after on collect, time is 1733335176 s
after emit, time is 1733335176 s
Подробнее здесь: https://stackoverflow.com/questions/792 ... is-suspend
Как приостановить выброс потока, когда коллектор приостановлен? ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как одновременно приостановить поток и разблокировать Mutex из этого потока
Anonymous » » в форуме C++ - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-