@@ -34,7 +34,7 @@ internal class SqlServerJobQueue : IPersistentJobQueue
34
34
// This is an optimization that helps to overcome the polling delay, when
35
35
// both client and server reside in the same process. Everything is working
36
36
// without these events, but it helps to reduce the delays in processing.
37
- internal static readonly ConcurrentDictionary < string , AutoResetEvent > NewItemInQueueEvents = new ( ) ;
37
+ internal static readonly ConcurrentDictionary < Tuple < SqlServerStorage , string > , AutoResetEvent > NewItemInQueueEvents = new ( ) ;
38
38
39
39
private static readonly Func < Tuple < SqlServerStorage , string > , SemaphoreSlim > CreateSemaphoreFunc = CreateSemaphore ;
40
40
private static readonly TimeSpan LongPollingThreshold = TimeSpan . FromSeconds ( 1 ) ;
@@ -123,7 +123,7 @@ private SqlServerTimeoutJob DequeueUsingSlidingInvisibilityTimeout(string[] queu
123
123
var queuesString = String . Join ( "_" , queues . OrderBy ( static x => x ) ) ;
124
124
var resource = Tuple . Create ( _storage , queuesString ) ;
125
125
126
- var waitArray = GetWaitArrayForQueueSignals ( queues , cancellationToken ) ;
126
+ var waitArray = GetWaitArrayForQueueSignals ( _storage , queues , cancellationToken ) ;
127
127
128
128
SemaphoreSlim semaphore = null ;
129
129
@@ -210,7 +210,7 @@ private SqlServerTransactionJob DequeueUsingTransaction(string[] queues, Cancell
210
210
? _options . QueuePollInterval
211
211
: TimeSpan . FromSeconds ( 1 ) ;
212
212
213
- var waitArray = GetWaitArrayForQueueSignals ( queues , cancellationToken ) ;
213
+ var waitArray = GetWaitArrayForQueueSignals ( _storage , queues , cancellationToken ) ;
214
214
215
215
while ( ! cancellationToken . IsCancellationRequested )
216
216
{
@@ -271,7 +271,7 @@ private SqlServerTransactionJob DequeueUsingTransaction(string[] queues, Cancell
271
271
return null ;
272
272
}
273
273
274
- private static WaitHandle [ ] GetWaitArrayForQueueSignals ( string [ ] queues , CancellationToken cancellationToken )
274
+ private static WaitHandle [ ] GetWaitArrayForQueueSignals ( SqlServerStorage storage , string [ ] queues , CancellationToken cancellationToken )
275
275
{
276
276
var waitList = new List < WaitHandle > ( capacity : queues . Length + 1 )
277
277
{
@@ -280,7 +280,7 @@ private static WaitHandle[] GetWaitArrayForQueueSignals(string[] queues, Cancell
280
280
281
281
foreach ( var queue in queues )
282
282
{
283
- waitList . Add ( NewItemInQueueEvents . GetOrAdd ( queue , static _ => new AutoResetEvent ( initialState : false ) ) ) ;
283
+ waitList . Add ( NewItemInQueueEvents . GetOrAdd ( Tuple . Create ( storage , queue ) , static _ => new AutoResetEvent ( initialState : false ) ) ) ;
284
284
}
285
285
286
286
return waitList . ToArray ( ) ;
0 commit comments