当前位置: 首页 > news >正文

Kotlin协程Flow任务流buffer缓冲批量任务,筛选批量中最高优先级任务运行(2)

Kotlin协程Flow任务流buffer缓冲批量任务,筛选批量中最高优先级任务运行(2)

 

 

import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.buffer
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.runBlockingfun main() {runBlocking {var eachFlag = truevar collectFlag = trueval taskFlow = flow {(0..51).chunked(5) //切块,分区.forEach { itList ->val emitData = mutableListOf<EmitData>()itList.forEach { idx ->val priority = (Math.random() * 99999).toInt()val data = TaskData(idx, priority)emitData.add(EmitData(data, { myTask(data) }))}emit(emitData)}}taskFlow.onStart { println("onStart") }.onEach { itList ->//假设这里是生产者,密集生产数据或任务collectFlag = trueif (eachFlag) {println("\n- - - - - - - - - - - - - - - - - - - -")eachFlag = false}print("onEach [ ")itList.forEach { itData ->print("(id=${itData.data.id} priority=${itData.data.priority}) ")}print("]")println()}.buffer(capacity = 3, onBufferOverflow = BufferOverflow.SUSPEND).collect { itList ->//假设这里是消费者,这里的消费者以一定的耗时完成任务或消费数据eachFlag = trueif (collectFlag) {println("\n↓ ↓ ↓\n")collectFlag = false}print("collect [ ")itList.forEach { itData ->print("(id=${itData.data.id} priority=${itData.data.priority}) ")}print("]")val sortedList = itList.sortedBy { it.data.priority }val highTask = sortedList.lastOrNull() as EmitDataprint(" 最高优先级=${highTask.data.priority}")println()highTask.func.invoke(highTask.data)println("*")}}
}data class TaskData(val id: Int, val priority: Int)fun myTask(data: TaskData) {println("high priority task (id=${data.id} priority=${data.priority}), run!")Thread.sleep(1000)
}data class EmitData(val data: TaskData, val func: (data: TaskData) -> Unit)

 

输出:onStart

onStart

- - - - - - - - - - - - - - - - - - - -
onEach [ (id=0 priority=44362) (id=1 priority=33932) (id=2 priority=34716) (id=3 priority=54267) (id=4 priority=94424) ]
onEach [ (id=5 priority=66072) (id=6 priority=66137) (id=7 priority=24833) (id=8 priority=91758) (id=9 priority=57628) ]
onEach [ (id=10 priority=52976) (id=11 priority=72277) (id=12 priority=96616) (id=13 priority=78802) (id=14 priority=42246) ]
onEach [ (id=15 priority=25361) (id=16 priority=5490) (id=17 priority=69197) (id=18 priority=18863) (id=19 priority=29917) ]
onEach [ (id=20 priority=87976) (id=21 priority=75357) (id=22 priority=81733) (id=23 priority=1851) (id=24 priority=44115) ]

↓ ↓ ↓

collect [ (id=0 priority=44362) (id=1 priority=33932) (id=2 priority=34716) (id=3 priority=54267) (id=4 priority=94424) ] 最高优先级=94424
high priority task (id=4 priority=94424), run!
*
collect [ (id=5 priority=66072) (id=6 priority=66137) (id=7 priority=24833) (id=8 priority=91758) (id=9 priority=57628) ] 最高优先级=91758
high priority task (id=8 priority=91758), run!
*
collect [ (id=10 priority=52976) (id=11 priority=72277) (id=12 priority=96616) (id=13 priority=78802) (id=14 priority=42246) ] 最高优先级=96616
high priority task (id=12 priority=96616), run!
*
collect [ (id=15 priority=25361) (id=16 priority=5490) (id=17 priority=69197) (id=18 priority=18863) (id=19 priority=29917) ] 最高优先级=69197
high priority task (id=17 priority=69197), run!
*
collect [ (id=20 priority=87976) (id=21 priority=75357) (id=22 priority=81733) (id=23 priority=1851) (id=24 priority=44115) ] 最高优先级=87976
high priority task (id=20 priority=87976), run!
*

- - - - - - - - - - - - - - - - - - - -
onEach [ (id=25 priority=11767) (id=26 priority=7471) (id=27 priority=97271) (id=28 priority=34503) (id=29 priority=84445) ]
onEach [ (id=30 priority=71684) (id=31 priority=14763) (id=32 priority=40293) (id=33 priority=68775) (id=34 priority=54138) ]
onEach [ (id=35 priority=11276) (id=36 priority=43112) (id=37 priority=38698) (id=38 priority=88547) (id=39 priority=82780) ]
onEach [ (id=40 priority=75921) (id=41 priority=3175) (id=42 priority=30385) (id=43 priority=33549) (id=44 priority=85067) ]
onEach [ (id=45 priority=17563) (id=46 priority=6782) (id=47 priority=33834) (id=48 priority=60989) (id=49 priority=2547) ]

↓ ↓ ↓

collect [ (id=25 priority=11767) (id=26 priority=7471) (id=27 priority=97271) (id=28 priority=34503) (id=29 priority=84445) ] 最高优先级=97271
high priority task (id=27 priority=97271), run!
*
collect [ (id=30 priority=71684) (id=31 priority=14763) (id=32 priority=40293) (id=33 priority=68775) (id=34 priority=54138) ] 最高优先级=71684
high priority task (id=30 priority=71684), run!
*
collect [ (id=35 priority=11276) (id=36 priority=43112) (id=37 priority=38698) (id=38 priority=88547) (id=39 priority=82780) ] 最高优先级=88547
high priority task (id=38 priority=88547), run!
*
collect [ (id=40 priority=75921) (id=41 priority=3175) (id=42 priority=30385) (id=43 priority=33549) (id=44 priority=85067) ] 最高优先级=85067
high priority task (id=44 priority=85067), run!
*
collect [ (id=45 priority=17563) (id=46 priority=6782) (id=47 priority=33834) (id=48 priority=60989) (id=49 priority=2547) ] 最高优先级=60989
high priority task (id=48 priority=60989), run!
*

- - - - - - - - - - - - - - - - - - - -
onEach [ (id=50 priority=81466) (id=51 priority=44705) ]

↓ ↓ ↓

collect [ (id=50 priority=81466) (id=51 priority=44705) ] 最高优先级=81466
high priority task (id=50 priority=81466), run!
*

 

 

 

相关:

https://blog.csdn.net/zhangphil/article/details/154840841

 

 

http://www.dtcms.com/a/614125.html

相关文章:

  • 口碑营销的作用成都抖音seo
  • 12.3 合规保障:GDPR与中国法规的落地实践
  • 怡清源企业网站建设可行性分析最牛餐饮营销手段
  • 门户网站设计要点怎样优化网络速度
  • 《Unity游戏多平台上架风险管控:预研适配与全流程实战指南》
  • 跨域问题解决方案汇总
  • 30-ESP32-S3开发
  • C语言编译爱心 | 深入浅出解析C语言编译过程及技巧
  • SPRING_CACHE_REDIS_技术总结
  • 【LeetCode热题100(67/100)】有效的括号
  • 网站建设公司彩铃织梦后台做的网站怎么绑定域名
  • 汇编语言编译器的作用 | 理解汇编编译过程与程序优化技巧
  • 网站备案每年一次吗网站建设实训的方法
  • 怎样查看网站的权重做微信网站公司哪家好
  • Typora picgo-core gitee图片上传设置
  • 哪个网站发布招聘信息免费淮安网站建设公司电话
  • 企业网站优化做法模拟网站效果
  • 第29集科立分板机:降本增效新选择科立自动化分板机赋能电子企业高质量发展
  • Revit 200+新功能之“构件赋房间属性”,解决特殊族提取房间错乱问题!中心点不落在房间内,进而无法正确识别所在房间!
  • 编辑器和笔记软件汇总(三):NotebookLM、note-gen、MiaoYan、LetsMarkdown、DocFlow
  • openGauss 企业级开源数据库架构深度解析
  • 伸展树分析
  • 通州做网站公司市场营销策划包括哪些内容
  • 嵌入式开发学习日志43——FreeRTOS之引入
  • 阳信住房和城乡建设厅网站小城镇建设的网站文献
  • 3542. 将所有元素变为 0 的最少操作次数
  • 宁波商城网站建设互联网创意网站有哪些方面
  • 基于Vue的售票系统开发3g480(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
  • 06-文件操作-练习
  • 中企动力做网站要全款全能网站模板