From a8f5da15d9792fa29c7ff480536fc854999607a5 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Mon, 4 Oct 2021 15:31:48 +0200 Subject: [PATCH] Update WorkflowLaunchpad.cs Closes #1584 --- .../Services/Workflows/WorkflowLaunchpad.cs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs b/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs index 0c0ca39d0..06af13e66 100644 --- a/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs +++ b/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs @@ -110,7 +110,7 @@ namespace Elsa.Services.Workflows { var workflowBlueprint = await _workflowRegistry.GetAsync(workflowDefinitionId, tenantId, VersionOptions.SpecificVersion(version), cancellationToken); - if (workflowBlueprint == null) + if (workflowBlueprint == null || workflowBlueprint.IsDisabled) return null; return await FindStartableWorkflowAsync(workflowBlueprint, activityId, correlationId, contextId, tenantId, cancellationToken); @@ -124,13 +124,19 @@ namespace Elsa.Services.Workflows string? tenantId = default, CancellationToken cancellationToken = default) { - correlationId ??= Guid.NewGuid().ToString("N"); - + async Task CollectWorkflows() + { + var startableWorkflowDefinition = await CollectStartableWorkflowInternalAsync(workflowBlueprint, activityId, correlationId, contextId, tenantId, cancellationToken); + return startableWorkflowDefinition != null ? await InstantiateStartableWorkflow(startableWorkflowDefinition, cancellationToken) : default; + } + + if (string.IsNullOrEmpty(correlationId)) + return await CollectWorkflows(); + // Acquire a lock on correlation ID to prevent duplicate workflow instances from being created. await using var correlationLockHandle = await AcquireLockAsync(correlationId, cancellationToken); + return await CollectWorkflows(); - var startableWorkflowDefinition = await CollectStartableWorkflowInternalAsync(workflowBlueprint, activityId, correlationId, contextId, tenantId, cancellationToken); - return startableWorkflowDefinition != null ? await InstantiateStartableWorkflow(startableWorkflowDefinition, cancellationToken) : default; } public async Task FindAndExecuteStartableWorkflowAsync( @@ -254,7 +260,7 @@ namespace Elsa.Services.Workflows private async Task CollectStartableWorkflowInternalAsync( IWorkflowBlueprint workflowBlueprint, string? activityId, - string correlationId, + string? correlationId, string? contextId = default, string? tenantId = default, CancellationToken cancellationToken = default)