Я этот производитель/потребитель модель я уже делал с core.async thread
функции следующим образом:Должен ли кто-то поставить `while true` внутри потока core.async clojure?
(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)))))))))
Однако, когда я прочитал the documentation для thread
, он говорит:
Исполняет тело в другой поток, немедленно возвращаясь к вызывающему потоку . Возвращает канал, который получит результат тела по завершении.
Похоже, что ожидаемая нить будет называться единовременно; не то, что он построен для петли while
.
Должен ли я не делать while true
в thread
блоке? Или поток будет очищен, когда я закрою результат chan thread
?
У меня есть трудное время, полагая, что 'loop' внутри' thread' сможет быть утилизирован/освобожден/мусор собран, но вы ответили на мой вопрос! – Micah
получил это очищено для меня в clojure # core-async slack room. благодаря! – Micah