Fix the worker so it does not leak threads.

Previously, it would start a subscriber thread every time `work`
was called and then leave it running.