Refactor async stuff to allow for nested states (via nested switch statements).  This faciliates having a single try/catch encompassing the entire try block, regardless of any async behavior.