Что закрывает канал kotlinx.coroutines
Что закрывает канал kotlinx.coroutines, используя channel.close(), и каков будет отрицательный эффект от ручного закрытия каналов? Если я не закрою канал вручную, будет какая-то ненужная обработка? Будет ли ссылка на канал где-нибудь, что мешает ей быть GCd? Или функция закрытия просто существует как способ информирования потенциальных пользователей канала о том, что ее больше нельзя использовать.
(Вопрос отправлен с форума Kotlin https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549)
Ответы
Ответ 1
Закрытие канала концептуально работает, отправив специальный "токен" по этому каналу. Вы закрываете канал, когда у вас есть конечная последовательность элементов, которые будут обрабатываться потребителями, и вы должны сообщить потребителям, что эта последовательность закончена. Вам не нужно закрывать канал иначе.
Каналы не привязаны к какому-либо собственному ресурсу, и их не нужно закрывать, чтобы освободить их память. Просто удалить все ссылки на канал в порядке. GC придет, чтобы очистить его.