kotlin协程接收管道ReceiveChannel生产者produce

本文演示了一个Kotlin协程的例子,通过CoroutineScope和Dispatchers.IO创建了一个协程,使用produce函数创建了一个ReceiveChannel生产者,每秒发送一个递增的整数。runBlocking在一个无限循环中接收并打印这些值,显示了协程的并发执行和非阻塞特性。

kotlin协程接收管道ReceiveChannel生产者produce

 

import kotlinx.coroutines.*
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.produce

fun main(args: Array<String>) {
    var rc: ReceiveChannel<Int>? = CoroutineScope(Dispatchers.IO).produce {
        var i = 0
        while (true) {
            delay(1000)
            send(i)
            i++
        }
    }

    runBlocking {
        while (true) {
            var j = rc?.receive()
            println("$j") //每隔1秒收到ReceiveChannel produce发送的值
        }

        rc?.cancel() //不会关闭,因为无限循环
    }
}

 

 

kotlin协程管道Channel_zhangphil的博客-优快云博客runBlocking 内部启动的3个协程做耗时操作,从输出可以看到3个协程交叉并发执行,runBlocking 会等到3个协程执行结束后才退出,输出结果有明确先后顺序。runBlocking 会等待相同作用域的协程完成才退出runBlocking 本身阻塞线程,但内部运行的协程又非阻塞。kotlin的runBlocking 当内部相同作用域的所有协程都运行结束后,在 runBlocking 之后的代码才能执行, runBlocking 会阻塞所在线程。kotlin协程管道Channel。https://blog.youkuaiyun.com/zhangphil/article/details/131096899

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值