/// <summary>
 /// Runs the event.
 /// </summary>
 /// <param name="context">The context.</param>
 /// <returns>The async task.</returns>
 private async Task StateEventRunner(StateMachineContextBase <TState, TTransition, TPayload> context)
 {
     try
     {
         await this.OnEnter(context);
     }
     catch (Exception ex)
     {
         if (null != this.faultHandler)
         {
             try
             {
                 this.faultHandler(context, ex);
             }
             catch (Exception newEx)
             {
                 this.stateMachine.FaultStateMachineContext(context, newEx);
             }
         }
         else
         {
             this.stateMachine.HandleFault(context, ex);
         }
     }
     finally
     {
         context.EndStateOperation();
     }
 }
        /// <summary>
        /// Invokes the state entrance.
        /// </summary>
        /// <param name="context">The context.</param>
        public void InvokeEnter(StateMachineContextBase <TState, TTransition, TPayload> context)
        {
            context.BeginStateOperation();

            if (null != this.OnEnter)
            {
                Task.Run(() => this.StateEventRunner(context));
            }
            else
            {
                context.EndStateOperation();
            }
        }