2017-05-10 38 views
10

Điều gì sẽ đóng kênh kotlinx.coroutines bằng channel.close() và tác động tiêu cực của các kênh đóng theo cách thủ công sẽ là gì? Nếu tôi không đóng kênh theo cách thủ công thì sẽ có một số xử lý không cần thiết? Liệu có một tham chiếu đến kênh ở đâu đó ngăn không cho nó trở thành GCd không? Hoặc chức năng đóng chỉ tồn tại như một cách để thông báo cho người dùng tiềm năng của kênh rằng nó không còn có thể được sử dụng nữa.Điều gì đóng kênh kotlinx.coroutines không

(Câu hỏi đăng lại từ Kotlin diễn đàn https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549)

Trả lời

7

bế một kênh khái niệm hoạt động bằng cách gửi một "token gần" đặc biệt trên kênh này. Bạn đóng một kênh khi bạn có một chuỗi các phần tử hữu hạn được xử lý bởi người tiêu dùng và bạn phải báo hiệu cho người tiêu dùng rằng chuỗi này đã kết thúc. Bạn không phải đóng kênh khác.

Kênh không được gắn với bất kỳ nguồn gốc nào và chúng không phải đóng để giải phóng bộ nhớ của chúng. Chỉ cần bỏ tất cả các tham chiếu đến một kênh là tốt. GC sẽ đến để làm sạch nó lên.

Các vấn đề liên quan