2015-03-05 6 views
9

Close Methode (zumindest in Java-Welt) ist etwas, das Sie als ein guter Bürger anrufen müssen, wenn Sie damit fertig sind verwandte Ressource. Irgendwie habe ich automatisch begonnen, das gleiche für die close! Funktion von core.async Bibliothek anzuwenden. Diese channels sind nicht so eng wie ich es verstehe und deshalb bin ich mir nicht sicher, ob es notwendig ist, zu schließen !. Ist es in Ordnung, Kanäle (lokale) für Garbage Collection zu belassen, ohne sie zu schließen?Sollten clojure core.async-Kanäle geschlossen werden, wenn sie nicht mehr verwendet werden?

Antwort

7

Es ist in Ordnung, sie dem Müllsammler zu lassen, es sei denn, sie zu schließen hat Bedeutung in Ihrem Programm. Es ist üblich, sie als Signal für andere Komponenten zu schließen, damit es Zeit ist, sich selbst abzuschalten. Andere Kanäle sollen für immer verwendet werden und es wird niemals erwartet, dass sie geschlossen oder Müll gesammelt werden. In noch anderen Fällen wird der Kanal verwendet, um einen Wert an einen Verbraucher zu übermitteln, und dann sind sowohl der Produzent als auch der Verbraucher fertig und der Kanal wird gecodiert. In diesem letzten Fall müssen sie nicht geschlossen werden.

+0

Schöne Antwort, nur ein Beispiel. "Wann hat das Sinn?" kann sein, wenn Sie async/reduce verwenden, was einen geschlossenen Eingangskanal erfordert, bevor etwas ausgegeben wird. –

+1

Das häufigste Beispiel ist core.async/timeout, bei dem ein Kanal geschlossen wird, um anzuzeigen, dass die Zeit abgelaufen ist und kein Wert erstellt wurde. In der Regel würde das Schließen eines Kanals nach dem Erzielen eines Werts oder anstelle von einem erfolgen. –