Couldn't you perhaps make an async runtime that isn't async and just blocks? That would let you keep only the async interface.