kotlin Channel的用法

channel相当于管道,协程间通信用。测试下:

Kotlin 复制代码
private fun tsetChannel() {
        lifecycleScope.launch {
            val channel = Channel<Int>()
            launch {
                for (i in 1..5) {
                    Log.d("zxzx", "开始发送数据:$i")
                    channel.send(i)
                }
                channel.close()
            }
            for (i in channel) {
                Log.d("zxzx", "接收到数据:$i")
            }
//           Log.d("zxzx", "receive: ${channel.receive()}") // 抛异常: Channel was closed
        }
        Log.d("zxzx", "东风不与周郎便,铜雀春深锁二乔。")
    }

运行,打印:

ok. 一个协程在发数据,另一个协程接受到数据。

再测试下:

Kotlin 复制代码
fun testProduceAndConsume() {
        GlobalScope.launch {
            val channel = Channel<Int>()

            val producer = GlobalScope.launch(Dispatchers.IO) {
                var i = 0
                while (true) {
                    if (channel.isClosedForReceive) {
                        Log.d("zxzx", "channel已关闭")
                        break
                    }
                    Log.d("zxzx", "生产者生产了:$i")
                    channel.send(i++)
                    delay(1000)
                }
            }

            val consumer = GlobalScope.launch {
                while (true) {
                    val element = channel.receive() // 没数据时会挂起等待数据
                    Log.d("zxzx", "消费者消费了: $element")
                    if (element == 10) {
                        channel.close()
                        break
                    }
                }
            }

            producer.join()
            consumer.join()
            Log.d("zxzx", "所有任务完成")
        }
    }

打印:

ok .

相关推荐
wen_zhufeng1 小时前
用 vLLM 加速 TTS 推理:通用改造指南
android·vllm
名剑走天下2 小时前
android 面试题
kotlin
长友cy3 小时前
windows 搭建Qt编译Android 应用程序,快速搭建
android·windows
智驭未来掌门人4 小时前
Android Kotlin 开发避坑指南:从语言特性到工程化实践
android
码农coding4 小时前
android12 ViewRootImpl分析
android
stevenzqzq4 小时前
compose项目返回到当前页面闪烁原因分析
android
古法安卓5 小时前
Android-显示流程
android·java·android studio
CircleMouse5 小时前
画一个Android智能手机机器人
android·智能手机·机器人
数据知道6 小时前
PHP 代码审计实战——ThinkPHP、Laravel 历史漏洞模式深度剖析
android·网络·web安全·网络安全·php·laravel
拍客圈6 小时前
换服务器 mozcjpeg 5.0.0
android