Kotlin Quasar话题和频道阻塞问题

我在Kotlin玩Quasar,并且开始讨论话题和频道。 我正在关注一些Java示例,并写了一小段代码。 不幸的是,我似乎无法得到它的工作。 它只是阻止主线程并等待。 我不太确定连接是在做什么,并想知道这是否会成为问题?

public fun channelsDemo() { val x: Val<Int> = Val() val t: Topic<Int> = Topic() fiber { val c: Channel<Int> = t.subscribe(Channels.newChannel(0)) do { val m = c.receive() System.out.println("Channel => " + (m + x.get())) } while (m != null) }.join() x.set(13) t.send(5) t.close() } 

编辑:

 public fun channelsDemo() { val x: Val<Int> = Val() val t: Topic<Int> = Topic() fiber { val c: Channel<Int> = t.subscribe(Channels.newChannel(0)) do { val m = c.receive() System.out.println("Channel => " + (m + x.get())) } while (m != 40) } fiber { Strand.sleep(20000) x.set(13) t.send(5) t.send(21) t.send(40) t.close() } } 

join方法告诉当前的线 (即线或光纤)被阻塞,直到它被呼叫的线终止。 在这种情况下,您要等待光纤终止,但由于您尚未发送任何内容,因此很难启动。

为了解决这个问题,将光纤分配给一些本地的( val f = fiber { ... } ),并且只在程序结束时加入。 另外,不要把它分配给任何东西,也不要加入。