私はそうのようなcore.async thread
機能を作ってきたこのプロデューサ/コンシューマパターンを持っている:私はthread
ためthe documentationを読んだときclojure core.asyncスレッドの中に `while true 'を入れるべきですか?
(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)))))))))
はしかし、それは言う:
は、本体を実行します別のスレッドでは、すぐに 呼び出しスレッドに戻ります。完了時に 本文の結果を受け取るチャンネルを返します。
予想されるスレッドが1回限りと呼ばれるように聞こえます。ループ内にwhile
ループが構築されているわけではありません。
ブロック内にwhile true
を入れてはいけませんか?または、thread
の結果を閉じるとスレッドがクリーンアップされますか?
私は 'スレッド'の中の 'loop'が/ disallocated/garbage collectの処理ができると信じていますが、あなたは私の質問に答えました! – Micah
はそれをclojure#core-async slack roomで私のために解決しました。ありがとう! – Micah