Meine Situation ist, dass der gleiche Kanal zwischen verschiedenen Funktionen geteilt wird und ich den Kanal schließen muss, wenn alle diese Funktionen signalisieren, dass sie damit erledigt sind. Das ist, was ich mir ausgedacht habe, aber es ist nicht ideal, weil ich Schleppkännchen behandeln muss und ein spezielles Schlüsselwort senden muss, anstatt das Schließen zu verwenden! Funktion. Gibt es einen anderen, besseren Weg, dies zu tun? Gibt es dafür eine Funktion von core.async?Erstellen Sie Kanäle, die mehrmals geschlossen werden müssen
(defn shared-chan [n]
(let [in (chan)
out (chan)]
(go-loop [n n]
(if (= n 0)
(do
(async/close! in)
(async/close! out))
(let [in-msg (<! in)]
(if (not= :close in-msg)
(do
(>! out in-msg)
(recur n))
(recur (dec n))))))
[in out]))