web-dev-qa-db-ja.com

kotlinx.coroutinesチャネルを閉じると

Channel.close()を使用してkotlinx.coroutinesチャネルを閉じると、チャネルを手動で閉じないことによる悪影響は何になりますか?手動でチャンネルを閉じないと、不要な処理が発生しますか? GCdを妨げるチャネルへの参照はどこかにありますか?または、閉じる機能は、チャネルの潜在的なユーザーに、チャネルが使用できなくなったことを通知する方法として存在するだけですか。

(Kotlinフォーラムから再投稿された質問 https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549

24
Roman Elizarov

チャネルを閉じることは、概念的には、このチャネルを介して特別な「クローズトークン」を送信することによって機能します。コンシューマーによって処理される要素の有限のシーケンスがある場合にチャネルを閉じ、このシーケンスが終了したことをコンシューマーに通知する必要があります。それ以外の場合は、チャネルを閉じる必要はありません。

チャネルはネイティブリソースに関連付けられておらず、メモリを解放するために閉じる必要はありません。チャネルへのすべての参照を削除するだけで問題ありません。 GCはそれをクリーンアップするようになります。

22
Roman Elizarov