2017-05-10 65 views
10

Co zamyka zamykanie kanału kotlinx.coroutines za pomocą metody channel.close() i jaki byłby negatywny efekt nie ręcznego zamykania kanałów? Czy jeśli ręcznie nie zamknę kanału, nastąpi niepotrzebne przetwarzanie? Czy będzie gdzieś odniesienie do kanału, który uniemożliwi mu istnienie GCd? Czy też funkcja ścisła istnieje po prostu jako sposób informowania potencjalnych użytkowników kanału, że nie można jej już używać.Co zamyka kanał kotlinx.coroutines?

(pytanie umieszczane od Kotlin forum https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549)

Odpowiedz

7

zamknięcie kanału koncepcyjnie działa poprzez wysłanie specjalnego tokena „bliski” na tym kanale. Zamykasz kanał, gdy masz skończoną sekwencję elementów do przetworzenia przez konsumentów i musisz poinformować konsumentów, że ta sekwencja się skończyła. W przeciwnym wypadku nie musisz zamykać kanału.

Kanały nie są powiązane z żadnym rodzimym zasobem i nie trzeba ich zamykać, aby zwolnić ich pamięć. Upuszczenie wszystkich odniesień do kanału jest w porządku. GC przyjdzie, aby to posprzątać.