@@ -16,7 +16,7 @@ class WorkflowTask : IBackgroundTask
16
16
private readonly IWorkflowExecutor _executor ;
17
17
private readonly IQueueProvider _queueProvider ;
18
18
private readonly ILogger _logger ;
19
- private readonly Task _task ;
19
+ private readonly IList < Task > _tasks ;
20
20
private readonly WorkflowOptions _options ;
21
21
private readonly IDateTimeProvider _datetimeProvider ;
22
22
private bool _shutdown = true ;
@@ -29,21 +29,27 @@ public WorkflowTask(IPersistenceProvider persistenceStore, IQueueProvider queueP
29
29
_options = options ;
30
30
_logger = loggerFactory . CreateLogger < WorkflowTask > ( ) ;
31
31
_lockProvider = lockProvider ;
32
- _task = new Task ( RunWorkflows ) ;
32
+
33
+ _tasks = new List < Task > ( ) ;
34
+ for ( int i = 0 ; i < Environment . ProcessorCount ; i ++ )
35
+ _tasks . Add ( new Task ( RunWorkflows ) ) ;
36
+
33
37
_datetimeProvider = datetimeProvider ;
34
38
persistenceStore . EnsureStoreExists ( ) ;
35
39
}
36
40
37
41
public void Start ( )
38
42
{
39
43
_shutdown = false ;
40
- _task . Start ( ) ;
44
+ foreach ( var task in _tasks )
45
+ task . Start ( ) ;
41
46
}
42
47
43
48
public void Stop ( )
44
49
{
45
50
_shutdown = true ;
46
- _task . Wait ( ) ;
51
+ foreach ( var task in _tasks )
52
+ task . Wait ( ) ;
47
53
}
48
54
49
55
/// <summary>
@@ -56,8 +62,9 @@ private async void RunWorkflows()
56
62
try
57
63
{
58
64
var workflowId = await _queueProvider . DequeueWork ( QueueType . Workflow ) ;
65
+
59
66
if ( workflowId != null )
60
- Parallel . Invoke ( ( ) => ProcessWorkflow ( workflowId ) ) ;
67
+ await ProcessWorkflow ( workflowId ) ;
61
68
else
62
69
await Task . Delay ( _options . IdleTime ) ; //no work
63
70
}
@@ -68,7 +75,7 @@ private async void RunWorkflows()
68
75
}
69
76
}
70
77
71
- private async void ProcessWorkflow ( string workflowId )
78
+ private async Task ProcessWorkflow ( string workflowId )
72
79
{
73
80
try
74
81
{
0 commit comments