diff --git a/Elsa.sln b/Elsa.sln
index b27c57c75..b4e9ed417 100644
--- a/Elsa.sln
+++ b/Elsa.sln
@@ -359,8 +359,11 @@ EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.HttpEndpointSecurity", "src\samples\aspnet\Elsa.Samples.HttpEndpointSecurity\Elsa.Samples.HttpEndpointSecurity.csproj", "{82B115DA-E3D0-49D7-AD08-DE9387656756}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WatchDirectoryWorker", "src\samples\worker\Elsa.Samples.WatchDirectoryWorker\Elsa.Samples.WatchDirectoryWorker.csproj", "{8EC3CF51-EBC1-4B45-881E-4B1B8190D579}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.InfiniteLoopDetection", "src\samples\aspnet\Elsa.Samples.InfiniteLoopDetection\Elsa.Samples.InfiniteLoopDetection.csproj", "{A2572DBF-AF11-4A02-AF99-B343871F2D85}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.Forks", "src\samples\console\Elsa.Samples.Forks\Elsa.Samples.Forks.csproj", "{AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -855,6 +858,10 @@ Global
{A2572DBF-AF11-4A02-AF99-B343871F2D85}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A2572DBF-AF11-4A02-AF99-B343871F2D85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2572DBF-AF11-4A02-AF99-B343871F2D85}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1016,6 +1023,7 @@ Global
{82B115DA-E3D0-49D7-AD08-DE9387656756} = {22E75696-6FE9-436A-9097-EE21C603F818}
{8EC3CF51-EBC1-4B45-881E-4B1B8190D579} = {E42743A0-FBDD-4150-9D53-6000496D9B87}
{A2572DBF-AF11-4A02-AF99-B343871F2D85} = {22E75696-6FE9-436A-9097-EE21C603F818}
+ {AB67BA19-5BC2-4C6D-A994-61D51A6A6FD5} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}
diff --git a/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj
new file mode 100644
index 000000000..3996e6db8
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.Forks/Elsa.Samples.Forks.csproj
@@ -0,0 +1,17 @@
+
+
+
+ Exe
+ net5.0
+ false
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/samples/console/Elsa.Samples.Forks/Program.cs b/src/samples/console/Elsa.Samples.Forks/Program.cs
new file mode 100644
index 000000000..cbfd28f42
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.Forks/Program.cs
@@ -0,0 +1,27 @@
+using System.Threading.Tasks;
+using Elsa.Samples.Forks.Workflows;
+using Elsa.Services;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Elsa.Samples.Forks
+{
+ internal class Program
+ {
+ private static async Task Main()
+ {
+ // Create a service container with Elsa services.
+ var services = new ServiceCollection()
+ .AddElsa(options => options
+ .AddConsoleActivities()
+ .AddActivitiesFrom()
+ .AddWorkflowsFrom())
+ .BuildServiceProvider();
+
+ // Get a workflow runner.
+ var workflowRunner = services.GetRequiredService();
+
+ // Run the workflow.
+ await workflowRunner.BuildAndStartWorkflowAsync();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs b/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs
new file mode 100644
index 000000000..e62e9a098
--- /dev/null
+++ b/src/samples/console/Elsa.Samples.Forks/Workflows/SimpleForkWorkflow.cs
@@ -0,0 +1,30 @@
+using Elsa.Activities.Console;
+using Elsa.Activities.ControlFlow;
+using Elsa.Builders;
+
+namespace Elsa.Samples.Forks.Workflows
+{
+ ///
+ /// Demonstrates connecting outcomes of activities to other activities.
+ ///
+ public class SimpleForkWorkflow : IWorkflow
+ {
+ public void Build(IWorkflowBuilder builder)
+ {
+ var users = new[] { "john", "tom", "jenny" };
+
+ builder
+ .WriteLine("This demonstrates a simple workflow with switch.")
+ .WriteLine("Using switch we can branch a workflow.")
+ .Then(fork => fork.WithBranches(users), fork =>
+ {
+ foreach (var user in users)
+ fork.When(user)
+ .WriteLine("A fork created for " + user)
+ .ThenNamed("Join1");
+ })
+ .Then(join => join.WithMode(Join.JoinMode.WaitAll)).WithName("Join1")
+ .WriteLine("Workflow finished.");
+ }
+ }
+}
\ No newline at end of file