   (remove-handler :foo ::bar-key)
   (event :foo :val 200) ; my-foo-handler no longer called"
   [key]
+  (let [[old new] (swap-returning-prev! lossy-workers* dissoc key)]
+    (when-let [old-worker (get old key)]
+      (.put (:queue old-worker) :die)))
   (handlers/remove-handler! handler-pool key))
 
 (defn remove-all-handlers
   "Remove all handlers."
   []
+  (let [[old new] (swap-returning-prev! lossy-workers* (fn [_] {}))]
+    (doseq [old-worker (vals old)]
+      (.put (:queue old-worker) :die)))
   (handlers/remove-all-handlers! handler-pool))
 
 (defn event

(defonce ^:private event-debug* (atom false))
(defonce ^:private monitoring?* (atom false))
(defonce ^:private monitor* (atom {}))

(defrecord LossyWorker [queue worker current-val])


  (let [current-val* (atom nil)
        last-val*    (atom (gensym))
        queue        (LinkedBlockingQueue.)
        work         (fn []
                       (while (not= (.take queue) :die)
                         (let [current @current-val*
                               last @last-val*]
                           (when (not= current last)
                             (update-fn current)
                             (reset! last-val* current))))
                       (log-event "Killing Lossy worker"))
        worker       (Thread. work)]
    (.start worker)
    (LossyWorker. queue worker current-val*)))
