<p><pre><code> > I still need to look into some things like
> how to properly shut down the `go` blocks.
</code></pre>
I have limited core.async experience, but one simple solution would be to replace `(go (while true ... (<! report-chan)))` with a `core.async/go-loop` that `alts!` from `[report-chan, (core.async/timeout 10000)]`. If the value comes from `report-chan`, then recur. If the value comes from the timeout channel (10 seconds of no activity) then don't thus ending the go block execution.<p>For more control, you can pass a poison channel in from the outside. In the go-loop, `alts!` from `[report-chan, poison-chan, (timeout 10000)]`. Like the timeout channel, don't recur if the value comes from poison-chan. And that's a chan that your exterior code will have access to.