Подтвердить что ты не робот

Clojure как остановить все блоки go или закрыть все каналы в core.async

все, когда я использую core.async из блока repl, вы уйдете от меня, потому что я потеряю канал, который используется для его остановки, потому что я перезаряжаю пространство имен. Например, если я запустил это из repl:

(go (when (not= c (second (async/alts! [c (async/timeout 1000)]))) 
      (println "hello")))

а затем я перезагружаю пространство имен, а c теряется. Теперь у меня есть "привет", спам мой REPL до конца времени. Если бы я мог закрыть все каналы или убить все блоки go, это избавит меня от перезагрузки моего REPL.

4b9b3361

Ответ 1

Невозможно сделать это в глобальном масштабе, о котором я знаю. Один из способов - использовать канал управления, который можно использовать для отключения любого цикла. pub/sub может работать хорошо для глобального канала управления.