Skip to content

Commit 2127e6f

Browse files
committed
shutdown concurrency issue
1 parent ffca3da commit 2127e6f

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

src/WorkflowCore/Services/BackgroundTasks/QueueConsumer.cs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ private async void Execute()
6161
{
6262
try
6363
{
64-
if (activeTasks.Count >= MaxConcurrentItems)
64+
var activeCount = 0;
65+
lock (activeTasks)
66+
{
67+
activeCount = activeTasks.Count;
68+
}
69+
if (activeCount >= MaxConcurrentItems)
6570
{
6671
await Task.Delay(Options.IdleTime);
6772
continue;
@@ -75,14 +80,19 @@ private async void Execute()
7580
await Task.Delay(Options.IdleTime, cancelToken);
7681
continue;
7782
}
78-
79-
if (activeTasks.ContainsKey(item))
83+
84+
var hasTask = false;
85+
lock (activeTasks)
86+
{
87+
hasTask = activeTasks.ContainsKey(item);
88+
}
89+
if (hasTask)
8090
{
8191
secondPasses.Add(item);
8292
if (!EnableSecondPasses)
8393
await QueueProvider.QueueWork(item, Queue);
8494
continue;
85-
}
95+
}
8696

8797
secondPasses.TryRemove(item);
8898

@@ -121,7 +131,13 @@ private async void Execute()
121131
}
122132
}
123133

124-
foreach (var task in activeTasks.Values)
134+
List<Task> toComplete;
135+
lock (activeTasks)
136+
{
137+
toComplete = activeTasks.Values.ToList();
138+
}
139+
140+
foreach (var task in toComplete)
125141
task.Wait();
126142
}
127143

0 commit comments

Comments
 (0)