码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Kotlin管道Channel在receiveAsFlow时debounce与flow差异


    Kotlin管道Channel在receiveAsFlow时debounce与flow差异

     

    1. import kotlinx.coroutines.Dispatchers
    2. import kotlinx.coroutines.channels.Channel
    3. import kotlinx.coroutines.delay
    4. import kotlinx.coroutines.flow.*
    5. import kotlinx.coroutines.launch
    6. import kotlinx.coroutines.runBlocking
    7. const val timeOut = Long.MAX_VALUE
    8. //val delayTimes = arrayListOf(50L, 100L, 150L, 200L, 250L)
    9. fun main(args: Array<String>) {
    10. val channel = Channel()
    11. runBlocking {
    12. launch(Dispatchers.IO) {
    13. repeat(5) {
    14. println("-")
    15. val t = System.currentTimeMillis()
    16. channel.send("$it-$t")
    17. val d = getDelayTime()
    18. println("$it channel 休眠 $d")
    19. delay(d)
    20. }
    21. }
    22. launch(Dispatchers.IO) {
    23. flow {
    24. repeat(5) {
    25. println("--")
    26. val t = System.currentTimeMillis()
    27. emit("$it-$t")
    28. val d = getDelayTime()
    29. println("$it flow 休眠 $d")
    30. delay(d)
    31. }
    32. }.debounce(timeOut) //这里的timeOut值很大,flow的collect收到。
    33. .collect {
    34. println("flow $it")
    35. }
    36. }
    37. channel.receiveAsFlow()
    38. .debounce(timeOut) //这里的timeOut值很大,collect收不到。
    39. .collect {
    40. println("debounce $it")
    41. } //一直阻塞接收消息
    42. }
    43. //阻塞,其实走不到这里。
    44. channel.close()
    45. }
    46. fun getDelayTime(): Long {
    47. return 10
    48. }

     

    -
    --
    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很快就收到了最后一条数据4-xxx...,而Channel在receiveAsFlow接收数据debounce时候,将会一直等待下去。这种纯flow和Channel的receiveAsFlow之间的差异要注意。

     

     

    Kotlin协程flow的debounce与管道Channel_zhangphil的博客-CSDN博客kotlin协程管道Channel。debounce蕴含了一定的缓冲思想,即,不立刻触发事件,而是先把要发射的数据进入队列,稍等一定时间(时间)延迟触发,而触发的重要条件取决于前一条数据和后一条数据的时间间隔,注意,前一条和后一条尚未被发射出去,只是待命中。发射完ABC,Kotlin审视待发射的ABCD,按理说ABCD与ABC间隔200,满足发射timeOut值,但是ABCD与ABCDE间隔100,所以跳过ABCD,直接发射ABCDE。A和AB都待发射,A和AB间隔100,所以跳过A,直接发射AB。https://blog.csdn.net/zhangphil/article/details/132525124

    Kotlin协程flow的debounce参数timeoutMillis特性_zhangphil的博客-CSDN博客debounce蕴含了一定的缓冲思想,即,不立刻触发事件,而是先把要发射的数据进入队列,稍等一定时间(时间)延迟触发,而触发的重要条件取决于前一条数据和后一条数据的时间间隔,注意,前一条和后一条尚未被发射出去,只是待命中。发射完ABC,Kotlin审视待发射的ABCD,按理说ABCD与ABC间隔200,满足发射timeOut值,但是ABCD与ABCDE间隔100,所以跳过ABCD,直接发射ABCDE。四、map,重组改写数据。A和AB都待发射,A和AB间隔100,所以跳过A,直接发射AB。https://blog.csdn.net/zhangphil/article/details/132525869

    Kotlin协程flow发送时间间隔debounce_zhangphil的博客-CSDN博客debounce蕴含了一定的缓冲思想,即,不立刻触发事件,而是先把要发射的数据进入队列,稍等一定时间(时间)延迟触发,而触发的重要条件取决于前一条数据和后一条数据的时间间隔,注意,前一条和后一条尚未被发射出去,只是待命中。发射完ABC,Kotlin审视待发射的ABCD,按理说ABCD与ABC间隔200,满足发射timeOut值,但是ABCD与ABCDE间隔100,所以跳过ABCD,直接发射ABCDE。四、map,重组改写数据。A和AB都待发射,A和AB间隔100,所以跳过A,直接发射AB。https://blog.csdn.net/zhangphil/article/details/132515686

     

  • 相关阅读:
    Unity3D下如何实现跨平台低延迟的RTMP、RTSP播放
    惠普打印机驱动安装
    三星在又一个市场击败中国手机,继续称霸全球,中国市场没那么重要
    分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/
    含文档+PPT+源码等]精品基于SSM的物流管理系统[包运行成功]Java毕业设计SSM项目源码快递管理系统
    asp.net core configuration配置读取
    600+,亮眼数据背后的康铂酒店品牌硬实力
    重写并自定义依赖的原生的Bean方法
    C++-标准库 std::pair的三种构造函数
    关于pytorch构建神经网络细节的学习记录
  • 原文地址:https://blog.csdn.net/zhangphil/article/details/132628774
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号