I think it makes sense to expose something like `bus.isEmpty`. I find `waitUntilEmpty` with a 0ms timeout a little confusing.