2015-03-05 13 views
9

Close metodo (almeno nel mondo java) è qualcosa che tu, come un buon cittadino, devi chiamare quando hai finito di usare la risorsa correlata. In qualche modo ho automaticamente iniziato ad applicare lo stesso per la funzione close! dalla libreria core.async. Questi channels non sono vincolati a nessun IO per quanto ho capito e quindi non sono sicuro se sia necessario chiamare close !. Va bene lasciare i canali (quelli locali) per Garbage Collection senza chiuderli?Se i canali core.async di clojure si chiudono quando non vengono più utilizzati?

risposta

7

Va bene lasciarli al netturbino a meno che chiuderli abbia significato nel programma. È normale chiuderli come un segnale ad altri componenti che è il momento di chiudersi. Altri canali sono destinati ad essere utilizzati per sempre e non si prevede che vengano chiusi o raccolti. In altri casi ancora il canale viene utilizzato per trasmettere un valore a un consumatore e quindi sia il produttore che il consumatore sono finiti e il canale è GC'd. In quest'ultimo caso non è necessario chiuderli.

+0

Bella risposta, solo un esempio. "when has meaning" può essere quando si utilizza async/reduce, che richiede un canale di input chiuso prima di produrre qualcosa. –

+1

l'esempio più comune è core.async/timeout che utilizza la chiusura di un canale per esprimere che il tempo è scaduto e nessun valore è stato prodotto. in genere la chiusura di un canale avverrebbe dopo aver ottenuto un valore o anziché uno. –

Problemi correlati