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