for what it's worth, these later methods do allocations so I'd prefer to have fewer of 'em.

(we could potentially also pool runnables, though then our code gets even harder to follow)