Ich habe diese Erzeuger/Verbraucher-Muster i wie so mit core.async thread
Funktionen machen habe:Sollte man `while true` in einen clojure core.async-Thread einfügen?
(defn -db-producer-factory [order-ids-chan next-chan]
(thread
(while true
(do
(let [order-id (<!! order-ids-chan)]
(condp = order-id
:finished (do
(>!! next-chan :finished))
(supress-w-nextexc
(->>
; get denorm'd order
(-> (r/-get-order :live order-id)
denorm/order->denormalized)
; put in a map to avoid nils
(hash-map :data)
(>!! next-chan)))))))))
jedoch, wenn ich the documentation für thread
lesen, heißt es:
den Körper Führt in einem anderen Thread, der sofort zum aufrufenden Thread zurückkehrt. Gibt einen Kanal zurück, der nach Fertigstellung das Ergebnis des Körpers erhält.
Es hört sich an wie sein erwarteter Thread einmal genannt wird; nicht, dass es für eine while
Schleife darin gebaut wurde.
Sollte ich nicht while true
in einem thread
Block tun? Oder wird der Thread aufgeräumt, wenn ich das thread
Ergebnis chan schließe?
Ich habe eine harte Zeit zu glauben, dass die 'loop' innerhalb' thread' entsorgt werden könnte/deallocated/garbage collected, aber Sie haben meine Frage beantwortet! – Micah
hat es für mich in clojure # Core-async Schlafraum aufgeräumt. Vielen Dank! – Micah