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?
9
A
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.
Problemi correlati
- 1. Come si eliminano i canali core.async di clojure?
- 2. Estensione della funzionalità di clojure core.async
- 3. Perché i Web Worker non vengono utilizzati di più?
- 4. Clojure core.async e Lamina
- 5. È ragionevole utilizzare i canali core.async per utilizzare i risultati dei post di http-kit in clojure?
- 6. In che modo si strutturano chiaramente le dipendenze tra i canali core.async?
- 7. Intellij contrassegna tutti i metodi come non utilizzati anche se vengono utilizzati
- 8. Come vengono implementati i canali Go?
- 9. Perché qui vengono utilizzati i lucchetti?
- 10. Come verificare se vengono utilizzati metodi non disponibili se l'obiettivo di distribuzione <sdk di base?
- 11. Dove vengono memorizzate le immagini e i contenitori di ancoraggio quando vengono utilizzati con Windows?
- 12. Come trovare i passi Cucumber che non vengono utilizzati
- 13. Perché vengono utilizzati i campi nascosti?
- 14. Come si chiudono i file da tempfile.mkstemp?
- 15. Determinare se vengono utilizzati gli assembly di GAC e NGen
- 16. I rifiuti goroutini vengono raccolti insieme ai loro canali?
- 17. Rails Le attività di rake DB vengono eseguite ma non si chiudono mai
- 18. Quali pacchetti cabala non vengono utilizzati
- 19. Cosa sono i moduli di unione e come vengono utilizzati?
- 20. garbo uscire da un Clojure core.async andare loop su uccidere
- 21. Come vengono utilizzati i DVCS in team di grandi dimensioni?
- 22. Quando usare "se" e "quando" in Clojure?
- 23. Spiega la sincronizzazione delle raccolte quando vengono utilizzati gli iteratori?
- 24. Quando vengono utilizzati IsRoot, IsAbstract e IsLeaf in UML?
- 25. Come arrestare al meglio una pipeline di processi core.async di clojure
- 26. Come reindirizzare [Autorizza] per loginUrl solo quando i ruoli non vengono utilizzati?
- 27. interruzione dell'istruzione di selezione quando tutti i canali sono chiusi
- 28. Dove si verifica la perdita di memoria quando mapcat interrompe la contropressione in core.async?
- 29. Does WebDriverWait sovrascrive ImplicitlyWait quando vengono utilizzati entrambi?
- 30. Come vengono utilizzati i margini e il riempimento in FireMonkey?
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. –
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. –