32

使用 channel.close() 关闭 kotlinx.coroutines 通道有什么作用,不手动关闭通道的负面影响是什么?如果我不手动关闭频道会不会有一些不必要的处理?是否会在某处引用通道以防止其成为 GCd?还是关闭功能只是作为一种通知渠道的潜在用户它不能再使用的方式而存在。

(问题转自 Kotlin 论坛https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549

4

1 回答 1

40

从概念上讲,通过在该通道上发送一个特殊的“关闭令牌”来关闭通道。当您有一个有限的元素序列要由消费者处理时,您关闭一个通道,并且您必须向消费者发出此序列结束的信号。否则您不必关闭频道。

通道不绑定到任何本机资源,也不必关闭它们来释放它们的内存。只需删除对频道的所有引用就可以了。GC 会来清理它。

于 2017-05-10T09:56:09.053 回答