public async Task <bool> SwitchTo(State state) { // Don't do anything if we are in the correct state. if (state == GetState()) { return(true); } // Put GameManager into state limbo to prevent state transitions. GameManagerParent.m_stateHandler = null; StateHandler result = await SwitchTo_Impl(state); if (result != null) { Debug.Assert(result.GetState() == state); GameManagerParent.m_stateHandler = result; return(true); } else { GameManagerParent.m_stateHandler = this; return(false); } }