(1)基本用法Channel实际上是一个并发安全的队列,它可以用来连接协程,实现不同协程的通信。生产者/消费者模式(send-channel-receive)Channel的基本用法如下:runBlocking{valchannel=Channel()//生产者valproducer=GlobalScope.launch{vari=0while(true){delay(1000)channel.send(++i)println("send$i")}}//消费者valconsumer=GlobalScope.launch{while(true){valelement=channel.receiv
我正在尝试使用0.30.0中的最新协程,但无法弄清楚如何使用新的范围。在最初的协程中,我可以使用UI或CommonPool设置上下文,一切正常。现在我在从房间数据库读取数据时尝试在ViewModel中使用GlobalScope,然后我想将返回的值分配给我的LiveData对象。当我尝试设置LiveData值时出现以下错误java.lang.IllegalStateException:CannotinvokesetValueonabackgroundthreadfungetContact(){GlobalScope.launch{valcontact=contacts.getContac
我读到强烈建议不要使用Globalscope,here.我有一个简单的用例。对于我收到的每条kafka消息(比如说一个Id列表),我必须拆分它并同时为每个Id调用一个休息服务,然后等待它完成并继续执行其他同步任务。该应用程序中没有其他东西需要协程。在这种情况下,我可以使用Globalscope吗?注意:这不是安卓应用程序。它是一个运行在服务器端的kafka流处理器。它是一个在Kubernetes中运行的临时、无状态、容器化(Docker)应用程序(如果愿意,可以符合流行语) 最佳答案 您应该使用结构化并发适本地确定并发范围。如果您不