public StateTransitionResult <TState, TTrigger> ExecuteAutoTransition(ExecutionParameters <T, TTrigger> parameters , StateTransitionResult <TState, TTrigger> currentResult) { if (AutoTransitions.TryGetValue(parameters.Trigger, out var autoTransitions)) { foreach (var transition in autoTransitions.OrderBy(t => t.Priority)) { var localResult = transition.Execute(parameters, currentResult); if (localResult.WasTransitioned) { return(localResult); } } } //Check for a super state and just return the incoming currentResult if no successful auto transitions return(_superstateConfig != null ? _superstateConfig.ExecuteAutoTransition(parameters, currentResult) : new StateTransitionResult <TState, TTrigger>(parameters.Trigger , currentResult.CurrentState , currentResult.CurrentState , currentResult.CurrentState , string.Empty , transitionDefined: false , conditionMet: false)); }
public async Task <StateTransitionResult <TState, TTrigger> > ExecuteAutoTransitionAsync(ExecutionParameters <T, TTrigger> parameters , StateTransitionResult <TState, TTrigger> currentResult) { if (AutoTransitions.TryGetValue(parameters.Trigger, out var triggerTransitions)) { foreach (var transition in triggerTransitions.OrderBy(t => t.Priority)) { var localResult = await transition.ExecuteAsync(parameters, currentResult) .ConfigureAwait(continueOnCapturedContext: false); if (localResult.WasTransitioned) { return(localResult); } } } //Check for a super state and just return the incoming currentResult if no successful auto transitions return(_superState != null ? await _superState.ExecuteAutoTransitionAsync(parameters, currentResult).ConfigureAwait(continueOnCapturedContext: false) : new StateTransitionResult <TState, TTrigger>(parameters.Trigger , currentResult.StartingState , currentResult.PreviousState , currentResult.CurrentState , currentResult.LastTransitionName , transitionDefined: true , wasCancelled: parameters.CancellationToken.IsCancellationRequested , conditionMet: false)); }