public static IStateMachineProvider <TContext, TStateId, TStatefulTask> PerformUntilFinalState <TContext, TStateId, TStatefulTask>(
     this IStateMachineBuilderWithoutStateId <TContext, TStateId, TStatefulTask> builder,
     TContext context)
     where TStatefulTask : class, IStatefulTask <TContext, TStateId>
 {
     return(builder.PerformUntilFinalState(context, customAction: null));
 }
 public static IStateMachineBuilderWithStateId <TContext, TStateId, TStatefulTask> On <TContext, TStateId, TStatefulTask>(
     this IStateMachineBuilderWithoutStateId <TContext, TStateId, TStatefulTask> builder,
     TStateId stateId)
     where TStatefulTask : class, IStatefulTask <TContext, TStateId>
 {
     return(builder.RememberStateId(stateId));
 }
 public static IStateMachineProvider <TContext, TStateId, TStatefulTask> PerformUntilFinalState <TContext, TStateId, TStatefulTask>(
     this IStateMachineBuilderWithoutStateId <TContext, TStateId, TStatefulTask> builder,
     TContext context,
     CustomStateMachineAction <TStateId>?customAction)
     where TStatefulTask : class, IStatefulTask <TContext, TStateId>
 {
     return(StateMachineUntilFinalStateProvider.Create(
                context, builder.InitialTask, builder.TransitionsTable, customAction
                ));
 }
 public static IStateMachineBuilderWithoutStateId <TContext, TStateId, IStatefulTaskWithRollback <TContext, TStateId> > OnFinalGoToSelfLoop <TContext, TStateId>(
     this IStateMachineBuilderWithoutStateId <TContext, TStateId, IStatefulTaskWithRollback <TContext, TStateId> > builder,
     TStateId finalStateId)
 {
     return(builder.On(finalStateId).GoTo(FinalStatefulTaskWithRollback <TContext> .Create(finalStateId)));
 }