diff --git a/samples/Sample04.ResultTransitions/Program.cs b/samples/Sample04.ResultTransitions/Program.cs
index 0cb79dd..716ed1d 100644
--- a/samples/Sample04.ResultTransitions/Program.cs
+++ b/samples/Sample04.ResultTransitions/Program.cs
@@ -1,12 +1,95 @@
// Copyright Xeno Innovations, Inc. 2026
// See the LICENSE file in the project root for more information.
+using Lite.StateMachine;
+
namespace Sample04.ResultTransitions;
-internal class Program
+/// State definitions.
+public enum StateId
+{
+ State1,
+ State2,
+ State3,
+}
+
+public class Program
{
- private static void Main(string[] args)
+ private static async Task Main(string[] args)
+ {
+ await ResultsStateMachine.RunAsync();
+ }
+}
+
+[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "Ignore")]
+public class ResultsStateMachine
+{
+ /// Example asynchronous run method.
+ /// Task.
+ public static async Task RunAsync()
+ {
+ var machine = new StateMachine();
+ machine.RegisterState(StateId.State1, onSuccess: StateId.State1, onError: StateId.State2, onFailure: null, subscriptionTypes: null);
+ machine.RegisterState(StateId.State2, onSuccess: StateId.State1, onError: null, onFailure: StateId.State3, subscriptionTypes: null);
+ machine.RegisterState(StateId.State3, subscriptionTypes: null);
+
+ // Async Example!
+ await machine.RunAsync(StateId.State1);
+ }
+
+ public class State1 : IState
+ {
+ public Task OnEnter(Context context)
+ {
+ // Set Error so we can continue.
+ context.NextState(Result.Error);
+
+ Console.WriteLine($"[State1][OnEnter].OnSuccess goto: '{context.NextStates.OnSuccess}'");
+ Console.WriteLine($"[State1][OnEnter].OnError goto: '{context.NextStates.OnError}'");
+ Console.WriteLine($"[State1][OnEnter].OnFailure goto: '{context.NextStates.OnFailure}'");
+ return Task.CompletedTask;
+ }
+
+ public Task OnEntering(Context context) => Task.CompletedTask;
+
+ public Task OnExit(Context context) => Task.CompletedTask;
+ }
+
+ public class State2 : IState
{
- Console.WriteLine("Coming Soon!");
+ public Task OnEnter(Context context)
+ {
+ // Set Success so we can continue.
+ context.NextState(Result.Error);
+
+ Console.WriteLine($"[State2][OnEnter].OnSuccess goto: '{context.NextStates.OnSuccess}'");
+ Console.WriteLine($"[State2][OnEnter].OnError goto: '{context.NextStates.OnError}'");
+ Console.WriteLine($"[State2][OnEnter].OnFailure goto: '{context.NextStates.OnFailure}'");
+
+ return Task.CompletedTask;
+ }
+
+ public Task OnEntering(Context context) => Task.CompletedTask;
+
+ public Task OnExit(Context context) => Task.CompletedTask;
+ }
+
+ public class State3 : IState
+ {
+ public Task OnEnter(Context context)
+ {
+ // Set Failure so we can continue.
+ context.NextState(Result.Success);
+
+ Console.WriteLine($"[State3][OnEnter].OnSuccess goto: '{context.NextStates.OnSuccess}'");
+ Console.WriteLine($"[State3][OnEnter].OnError goto: '{context.NextStates.OnError}'");
+ Console.WriteLine($"[State3][OnEnter].OnFailure goto: '{context.NextStates.OnFailure}'");
+
+ return Task.CompletedTask;
+ }
+
+ public Task OnEntering(Context context) => Task.CompletedTask;
+
+ public Task OnExit(Context context) => Task.CompletedTask;
}
}
diff --git a/samples/Sample04.ResultTransitions/Sample04.ResultTransitions.csproj b/samples/Sample04.ResultTransitions/Sample04.ResultTransitions.csproj
index ed9781c..c3ee00d 100644
--- a/samples/Sample04.ResultTransitions/Sample04.ResultTransitions.csproj
+++ b/samples/Sample04.ResultTransitions/Sample04.ResultTransitions.csproj
@@ -7,4 +7,8 @@
enable
+
+
+
+