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);
            }
        }