Skip to content

Commit 8119284

Browse files
authored
Merge pull request danielgerlag#287 from eddie3716/master
WorkflowOptions support for configuring max number of concurrent tasks.
2 parents b7584e5 + cf25332 commit 8119284

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/WorkflowCore/Models/WorkflowOptions.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ namespace WorkflowCore.Models
88
{
99
public class WorkflowOptions
1010
{
11+
internal static readonly int MinimumNumberOfConcurrentWorkflows = 2;
12+
1113
internal Func<IServiceProvider, IPersistenceProvider> PersistanceFactory;
1214
internal Func<IServiceProvider, IQueueProvider> QueueFactory;
1315
internal Func<IServiceProvider, IDistributedLockProvider> LockFactory;
@@ -16,6 +18,7 @@ public class WorkflowOptions
1618
internal TimeSpan PollInterval;
1719
internal TimeSpan IdleTime;
1820
internal TimeSpan ErrorRetryInterval;
21+
internal int? MaxConcurrentWorkflows;
1922

2023
public IServiceCollection Services { get; private set; }
2124

@@ -67,6 +70,16 @@ public void UseErrorRetryInterval(TimeSpan interval)
6770
{
6871
ErrorRetryInterval = interval;
6972
}
73+
74+
public void UseMaxConcurrentWorkflows(int? maxConcurrentWorkflows)
75+
{
76+
if (maxConcurrentWorkflows.HasValue && maxConcurrentWorkflows.Value < MinimumNumberOfConcurrentWorkflows)
77+
{
78+
throw new ArgumentOutOfRangeException($"If {nameof(maxConcurrentWorkflows)} is specified, it cannot be less than ${MinimumNumberOfConcurrentWorkflows}.");
79+
}
80+
81+
MaxConcurrentWorkflows = maxConcurrentWorkflows;
82+
}
7083
}
7184

7285
}

src/WorkflowCore/Services/BackgroundTasks/WorkflowConsumer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ internal class WorkflowConsumer : QueueConsumer, IBackgroundTask
1515
private readonly ObjectPool<IPersistenceProvider> _persistenceStorePool;
1616
private readonly ObjectPool<IWorkflowExecutor> _executorPool;
1717

18+
protected override int MaxConcurrentItems => Options.MaxConcurrentWorkflows ?? base.MaxConcurrentItems;
19+
1820
protected override QueueType Queue => QueueType.Workflow;
1921

2022
public WorkflowConsumer(IPooledObjectPolicy<IPersistenceProvider> persistencePoolPolicy, IQueueProvider queueProvider, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, IWorkflowRegistry registry, IDistributedLockProvider lockProvider, IPooledObjectPolicy<IWorkflowExecutor> executorPoolPolicy, IDateTimeProvider datetimeProvider, WorkflowOptions options)

0 commit comments

Comments
 (0)