Don't assume async always needs runloops