国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Kotlin管道Channel在receiveAsFlow時debounce與flow差異

這篇具有很好參考價值的文章主要介紹了Kotlin管道Channel在receiveAsFlow時debounce與flow差異。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

?

到了這里,關于Kotlin管道Channel在receiveAsFlow時debounce與flow差異的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Kotlin:使用flow實現(xiàn)倒計時功能

    Kotlin:使用flow實現(xiàn)倒計時功能

    一、效果圖 二、ExtendContext.kt 文件代碼 注意:創(chuàng)建ExtendContext.kt選擇file 使用kotlin擴展方法的特性創(chuàng)建countDown擴展方法,避免多個地方使用倒計時重復創(chuàng)建countDown方法 三、MainActivity.kt代碼 四、build.gradle.kts代碼

    2024年02月19日
    瀏覽(38)
  • Kotlin Flow 轉換以及上下游處理

    本片文章主要介紹Flow上下游處理,上游一個Flow使用map,上游兩個Flow使用zip,上游三個Flow及以上使用combine? 1、下面代碼展示了upStreamFlow作為上游,downStreamFlow作為下游,通過對upStreamFlow使用map操作符函數(shù)將upStreamFlow轉換為新的Flow對象,每個元素都通過lambda表達式進行處理,

    2024年02月11日
    瀏覽(24)
  • Kotlin Channel 熱流

    1、Channel是什么? 生產(chǎn)者:多個協(xié)程 消費者:多個協(xié)程 中間:Channel 管道 并發(fā)安全隊列 發(fā)送send 接收recv 協(xié)程間通信 1、Channel可以用于協(xié)程間通信 capacity 1、生產(chǎn)速度消費速度 如果緩沖區(qū)滿了,send會掛起,消費完后再生產(chǎn) capacity,默認容量,0 UNLIMITED:send不再掛起 容量接近

    2024年02月12日
    瀏覽(15)
  • 【Android】Kotlin 中的Flow是個什么東西

    前言 Kotlin Flow 是 Kotlin Coroutine 用于異步獲取數(shù)據(jù)流的一個庫。它允許我們以類似于集合的方式發(fā)射多個異步生成的值,并通過類似于 RxJava 的操作符鏈式處理這些值。 基本概念 Flow 的基本概念是,一個 Flow 代表了一個異步生成的值序列,這些值可能會在不同的時間點被發(fā)送出

    2024年02月08日
    瀏覽(20)
  • 【Kotlin 協(xié)程】Flow 流展平 ( 連接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )

    【Kotlin 協(xié)程】Flow 流展平 ( 連接模式 flatMapConcat | 合并模式 flatMapMerge | 最新展平模式 flatMapLatest )

    Flow 流在 接收元素 時 , 可能需要 另一個 流的元素 , 兩個流之間進行 交互的操作 就是 展平 , 常見的 展平模式有 : 連接模式 flatMapConcat : m 個元素的流 與 n 個元素的流 連接后 , 元素個數(shù)為 m x n 個 ; 合并模式 flatMapMerge : m 個元素的流 與 n 個元素的流 合并后 , 元素個數(shù)為 n x

    2023年04月08日
    瀏覽(22)
  • Kotlin差異化分析,let,run,with,apply及also

    作用域函數(shù) 是Kotlin比較重要的一個特性,共分為以下5種: let 、 run 、 with 、 apply 以及 also ,這五個函數(shù)的工作方式可以說非常相似,但是我們需要了解的是這5種函數(shù)的差異,以便在不同的場景更好的利用它。 讀完這篇文章您將了解到: 什么是Kotlin的作用域函數(shù)? let、r

    2024年02月12日
    瀏覽(19)
  • 大型Android項目架構:基于組件化+模塊化+Kotlin+協(xié)程+Flow+Retrofit+Jetpack+MVVM架構實現(xiàn)WanAndroid客戶端

    大型Android項目架構:基于組件化+模塊化+Kotlin+協(xié)程+Flow+Retrofit+Jetpack+MVVM架構實現(xiàn)WanAndroid客戶端

    前言:茍有恒,何必三更眠五更起;最無益,莫過一日曝十日寒。 之前一直想寫個 WanAndroid 項目來鞏固自己對 Kotlin+Jetpack+協(xié)程 等知識的學習,但是一直沒有時間。這里重新行動起來,從項目搭建到完成前前后后用了兩個月時間,平常時間比較少,基本上都是只能利用零碎的

    2024年02月09日
    瀏覽(27)
  • golang學習-channel管道

    1、定義 管道是golang語言提供的goroutine間的通訊方式,channel可以讓一個goroutine發(fā)送特定的值給另一個goroutine的通訊機制。 管道是引用類型。 golang語言中channel是一種特殊的類型。像一個隊列一樣,先進先出。 var 變量 chan 元素類型 var ch1 chan int //聲明一個傳遞整型的管道 var

    2024年01月19日
    瀏覽(24)
  • Golang中的管道(channel) 、goroutine與channel實現(xiàn)并發(fā)、單向管道、select多路復用以及goroutine panic處理

    Golang中的管道(channel) 、goroutine與channel實現(xiàn)并發(fā)、單向管道、select多路復用以及goroutine panic處理

    目錄 管道(channel) 無緩沖管道 有緩沖管道 需要注意 goroutine與channel實現(xiàn)并發(fā) 單向管道 定義單向管道 將雙向管道轉換為單向管道 單向管道作為函數(shù)參數(shù) 單向管道的代碼示例 select多路復用 案例演示 goroutine panic處理 案例演示 管道(channel)是 Go 語言中實現(xiàn)并發(fā)的一種方式,

    2024年02月06日
    瀏覽(24)
  • Go學習第十一章——協(xié)程goroutine與管道channel

    Go學習第十一章——協(xié)程goroutine與管道channel

    1 協(xié)程goroutine 1.1 基本介紹 前置知識:“進程和線程”,“并發(fā)與并行” 協(xié)程的概念 協(xié)程(Coroutine)是一種用戶態(tài)的輕量級線程,不同于操作系統(tǒng)線程,協(xié)程能夠在單個線程中實現(xiàn)多任務并發(fā),使用更少的系統(tǒng)資源。協(xié)程的運行由程序控制,不需要操作系統(tǒng)介入,因此協(xié)程之

    2024年02月08日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包