This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-06-14
Channels
- # admin-announcements (2)
- # beginners (32)
- # boot (217)
- # cider (20)
- # cljsjs (25)
- # cljsrn (9)
- # clojure (87)
- # clojure-android (7)
- # clojure-austin (4)
- # clojure-belgium (10)
- # clojure-canada (13)
- # clojure-dev (28)
- # clojure-dusseldorf (2)
- # clojure-greece (119)
- # clojure-nl (1)
- # clojure-russia (22)
- # clojure-spain (3)
- # clojure-spec (81)
- # clojure-uk (54)
- # clojurescript (32)
- # community-development (2)
- # core-async (19)
- # cursive (18)
- # datascript (5)
- # datomic (1)
- # dirac (22)
- # emacs (22)
- # hoplon (198)
- # incanter (1)
- # instaparse (4)
- # jobs (3)
- # keechma (15)
- # ldnclj (2)
- # lein-figwheel (14)
- # mount (8)
- # om (78)
- # om-next (4)
- # onyx (37)
- # other-languages (1)
- # pedestal (6)
- # re-frame (22)
- # reagent (25)
- # ring-swagger (17)
- # robots (1)
- # slack-help (1)
- # spacemacs (7)
- # specter (50)
- # spirituality-ethics (3)
- # uncomplicate (5)
- # untangled (1)
- # yada (17)
Есть такой сниппет
(let [ch (chan)]
(thread
(job-1))
(thread
(job-2))
(close-ch))
Хочу закрыть ch когда оба треда отработают. Кто подскажет как лучше сделать?kronos_vano: можно вместо thread использовать future запихав результат в коллекцию promises и затем детекить когда оно там результат вернет через (mapv deref promises)
ну thread мне не принципиален
вполне себе решение
чтоб не блокировать основной поток (mapv deref promises) можно засунуть уже в отдельный канал и блокировать уже его
не, mapv как раз надо чтобы блокировало все
тут все ок
@seryh: Забугорные коллеги подсказывают что лучше run! чем mapv
результат не нужен
@fxposter: по валидациям (в том числе) я делал либу с хелперами всякими на базе funcool/cats
(т.е. это все в концепции монад/аппликативных функторов) https://github.com/konukhov/pipeline/blob/master/examples/example1.clj
в своих проектах юзаю ее – главные минусы: придется какие-то куски оборачивать в монады + делал под свои конкретные нужды
Ну, например, так
(let [ch (chan)
res1 (thread (job-1))
res2 (thread (job-2))]
(go (let [_ (<! res1)
_ (<! res2)]
(close ch))))
@seryh: я использую transient (правда, код позаимствовал на stack overflow): https://github.com/abtv/tech-radar/blob/c93c6c25d962251c8ab4405c49edc5ff860f77ee/src/clj/tech_radar/analytics/search.clj#L35 . у меня при старте приложения много данных грузится в одном потоке, там тоже можно использовать, еще руки не дошли.