using System; using System.Linq; using System.Threading.Tasks; using Elsa.Activities.Console.Extensions; using Elsa.Activities.Primitives; using Elsa.Extensions; using Elsa.Models; using Elsa.Persistence.Memory; using Elsa.Services; using Microsoft.Extensions.DependencyInjection; namespace Sample11 { /// /// Demonstrates workflow correlation. /// public class Program { public static async Task Main(string[] args) { var services = BuildServices(); var registry = services.GetService(); var workflowDefinition = registry.RegisterWorkflow(); var invoker = services.GetRequiredService(); Console.WriteLine("How many workflow instances should be started? Enter a number:"); var instanceCount = int.Parse(Console.ReadLine()); for (var i = 0; i < instanceCount; i++) { await invoker.InvokeAsync(workflowDefinition, correlationId: $"document {i + 1}"); } var retry = true; while (retry) { Console.WriteLine(); Console.WriteLine("Now, enter the correlation ID of the workflow to resume:"); var correlationId = Console.ReadLine(); // Resume one workflow using the specified correlation ID. var triggeredExecutionContexts = (await invoker.TriggerAsync(nameof(SignalEvent), new Variables { ["Signal"] = "Proceed" }, correlationId)).ToList(); Console.WriteLine("{0} workflow was resumed. Would you like to trigger another?", triggeredExecutionContexts.Count); retry = string.Equals("y", Console.ReadLine(), StringComparison.OrdinalIgnoreCase); } Console.WriteLine("Bye!"); } private static IServiceProvider BuildServices() { return new ServiceCollection() .AddWorkflows() .AddConsoleActivities() .AddMemoryWorkflowDefinitionStore() .AddMemoryWorkflowInstanceStore() .BuildServiceProvider(); } } }