the two solutions that leap to my mind:
one is obvious: we make two separate awaits, where one is terminal (or perhalps an entry point is a better name), and the other async is link-like. The former has the behaviour that it throws exceptions when its rescheduled rather than giving you a future