Kotlin管道Channel在receiveAsFlow時debounce與flow差異
?
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
const val timeOut = Long.MAX_VALUE
//val delayTimes = arrayListOf(50L, 100L, 150L, 200L, 250L)
fun main(args: Array<String>) {
val channel = Channel<String>()
runBlocking {
launch(Dispatchers.IO) {
repeat(5) {
println("-")
val t = System.currentTimeMillis()
channel.send("$it-$t")
val d = getDelayTime()
println("$it channel 休眠 $d")
delay(d)
}
}
launch(Dispatchers.IO) {
flow {
repeat(5) {
println("--")
val t = System.currentTimeMillis()
emit("$it-$t")
val d = getDelayTime()
println("$it flow 休眠 $d")
delay(d)
}
}.debounce(timeOut) //這里的timeOut值很大,flow的collect收到。
.collect {
println("flow $it")
}
}
channel.receiveAsFlow()
.debounce(timeOut) //這里的timeOut值很大,collect收不到。
.collect {
println("debounce $it")
} //一直阻塞接收消息
}
//阻塞,其實走不到這里。
channel.close()
}
fun getDelayTime(): Long {
return 10
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-697685.html
-
--
0 channel 休眠 10
0 flow 休眠 10
--
-
1 flow 休眠 10
1 channel 休眠 10
-
--
2 channel 休眠 10
2 flow 休眠 10
-
--
3 channel 休眠 10
3 flow 休眠 10
-
--
4 channel 休眠 10
4 flow 休眠 10
flow 4-1693561918986
?
程序運行后,flow很快就收到了最后一條數(shù)據(jù)4-xxx...,而Channel在receiveAsFlow接收數(shù)據(jù)debounce時候,將會一直等待下去。這種純flow和Channel的receiveAsFlow之間的差異要注意。
?
?
Kotlin協(xié)程flow的debounce與管道Channel_zhangphil的博客-CSDN博客kotlin協(xié)程管道Channel。debounce蘊含了一定的緩沖思想,即,不立刻觸發(fā)事件,而是先把要發(fā)射的數(shù)據(jù)進入隊列,稍等一定時間(時間)延遲觸發(fā),而觸發(fā)的重要條件取決于前一條數(shù)據(jù)和后一條數(shù)據(jù)的時間間隔,注意,前一條和后一條尚未被發(fā)射出去,只是待命中。發(fā)射完ABC,Kotlin審視待發(fā)射的ABCD,按理說ABCD與ABC間隔200,滿足發(fā)射timeOut值,但是ABCD與ABCDE間隔100,所以跳過ABCD,直接發(fā)射ABCDE。A和AB都待發(fā)射,A和AB間隔100,所以跳過A,直接發(fā)射AB。https://blog.csdn.net/zhangphil/article/details/132525124
Kotlin協(xié)程flow的debounce參數(shù)timeoutMillis特性_zhangphil的博客-CSDN博客debounce蘊含了一定的緩沖思想,即,不立刻觸發(fā)事件,而是先把要發(fā)射的數(shù)據(jù)進入隊列,稍等一定時間(時間)延遲觸發(fā),而觸發(fā)的重要條件取決于前一條數(shù)據(jù)和后一條數(shù)據(jù)的時間間隔,注意,前一條和后一條尚未被發(fā)射出去,只是待命中。發(fā)射完ABC,Kotlin審視待發(fā)射的ABCD,按理說ABCD與ABC間隔200,滿足發(fā)射timeOut值,但是ABCD與ABCDE間隔100,所以跳過ABCD,直接發(fā)射ABCDE。四、map,重組改寫數(shù)據(jù)。A和AB都待發(fā)射,A和AB間隔100,所以跳過A,直接發(fā)射AB。https://blog.csdn.net/zhangphil/article/details/132525869
Kotlin協(xié)程flow發(fā)送時間間隔debounce_zhangphil的博客-CSDN博客debounce蘊含了一定的緩沖思想,即,不立刻觸發(fā)事件,而是先把要發(fā)射的數(shù)據(jù)進入隊列,稍等一定時間(時間)延遲觸發(fā),而觸發(fā)的重要條件取決于前一條數(shù)據(jù)和后一條數(shù)據(jù)的時間間隔,注意,前一條和后一條尚未被發(fā)射出去,只是待命中。發(fā)射完ABC,Kotlin審視待發(fā)射的ABCD,按理說ABCD與ABC間隔200,滿足發(fā)射timeOut值,但是ABCD與ABCDE間隔100,所以跳過ABCD,直接發(fā)射ABCDE。四、map,重組改寫數(shù)據(jù)。A和AB都待發(fā)射,A和AB間隔100,所以跳過A,直接發(fā)射AB。https://blog.csdn.net/zhangphil/article/details/132515686文章來源:http://www.zghlxwxcb.cn/news/detail-697685.html
?
到了這里,關于Kotlin管道Channel在receiveAsFlow時debounce與flow差異的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!