Skip to content

Commit 3560c65

Browse files
committed
dispatch/run checks the meta then call a new helper (exec) that asks to run a thing given a workload
1 parent cfee9b4 commit 3560c65

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

src/main/clojure/clojure/core/async/impl/dispatch.clj

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -89,17 +89,23 @@
8989
(defonce ^ExecutorService compute-executor
9090
(Executors/newCachedThreadPool (counted-thread-factory "async-compute-%d" true)))
9191

92-
(defn run
93-
"Runs Runnable r on current thread when :on-caller? meta true, else in a thread pool thread."
94-
[^Runnable r]
95-
(if (-> r meta :on-caller?)
96-
(try (.run r) (catch Throwable t (ex-handler t)))
97-
(impl/exec @executor r)))
98-
9992
(defn exec
100-
[f exec]
93+
[^Runnable r exec]
10194
(let [^ExecutorService e (case exec
10295
:compute compute-executor
10396
:io io-executor
104-
mixed-executor)]
105-
(.execute e f)))
97+
:mixed mixed-executor
98+
nil)]
99+
(if e
100+
(.execute e r)
101+
(impl/exec @executor r))))
102+
103+
(defn run
104+
"Runs Runnable r on current thread when :on-caller? meta true, else in a thread pool thread."
105+
([^Runnable r]
106+
(if (-> r meta :on-caller?)
107+
(try (.run r) (catch Throwable t (ex-handler t)))
108+
(exec r nil)))
109+
([^Runnable r workload]
110+
(exec r workload)))
111+

0 commit comments

Comments
 (0)