tidy up async code generation, using default continuations if not passed in