public void CriticalSectionsAwareQueueTest() { var queue = new CriticalSectionsAwareQueue <int>(); queue.Enqueue(1, new[] { "a", "b" }); queue.Enqueue(2, new[] { "b" }); queue.Enqueue(3, Array.Empty <string>()); TryAcquireAndAssert(queue, true, 1, 2); TryAcquireAndAssert(queue, true, 3, 1); TryAcquireAndAssert(queue, false, default, 1);
public Task ExecuteAsync(IEnumerable <TestCase> testCases, int workerCount) { _logger.LogTrace("Scheduling tests"); _customTestSession?.OnSessionStart(Options); var schedule = new CriticalSectionsAwareQueue <TestCase>(); foreach (var testCase in testCases) { schedule.Enqueue(testCase, _criticalSectionTokensProvider?.GetTokens(testCase) ?? Array.Empty <string>()); } for (int i = 0; i < workerCount; ++i) { _tasks.Add(WorkerActionAsync(this, schedule, _cancellationToken)); } return(Task.WhenAll(_tasks)); }