// Separate method so it can be used by Start private void Dispatch(WorkItem work, ParallelExecutionStrategy strategy) { log.Debug("Using {0} strategy for {1}", strategy, work.Name); switch (strategy) { default: case ParallelExecutionStrategy.Direct: work.Execute(); break; case ParallelExecutionStrategy.Parallel: #if APARTMENT_STATE if (work.TargetApartment == ApartmentState.STA) { ParallelSTAQueue.Enqueue(work); } else #endif ParallelQueue.Enqueue(work); break; case ParallelExecutionStrategy.NonParallel: #if APARTMENT_STATE if (work.TargetApartment == ApartmentState.STA) { NonParallelSTAQueue.Enqueue(work); } else #endif NonParallelQueue.Enqueue(work); break; } }
public void CreateWithSubscription() { var strategy = new ParallelExecutionStrategy(); var test = new MockDIDocumentExecuter(strategy); test.TestSelectExecutionStrategy(OperationType.Query).ShouldBeOfType <DIExecutionStrategy>(); test.TestSelectExecutionStrategy(OperationType.Mutation).ShouldBeOfType <DIExecutionStrategy>(); test.TestSelectExecutionStrategy(OperationType.Subscription).ShouldBe(strategy); }
public void CreateWithServiceProviderDefaultsAndSubscription() { var serviceProviderMock = new Mock <IServiceProvider>(MockBehavior.Strict); serviceProviderMock.Setup(x => x.GetService(typeof(IDocumentBuilder))).Returns((IDocumentBuilder)null).Verifiable(); serviceProviderMock.Setup(x => x.GetService(typeof(IDocumentValidator))).Returns((IDocumentValidator)null).Verifiable(); serviceProviderMock.Setup(x => x.GetService(typeof(IComplexityAnalyzer))).Returns((IComplexityAnalyzer)null).Verifiable(); var strategy = new ParallelExecutionStrategy(); var test = new MockDIDocumentExecuter(serviceProviderMock.Object, strategy); test.TestSelectExecutionStrategy(OperationType.Query).ShouldBeOfType <DIExecutionStrategy>(); test.TestSelectExecutionStrategy(OperationType.Mutation).ShouldBeOfType <DIExecutionStrategy>(); test.TestSelectExecutionStrategy(OperationType.Subscription).ShouldBe(strategy); }
// Separate method so it can be used by Start private async Task Dispatch(WorkItem work, ParallelExecutionStrategy strategy) { log.Debug("Using {0} strategy for {1}", strategy, work.Name); // Currently, we only track CompositeWorkItems - this could be expanded var composite = work as CompositeWorkItem; if (composite != null) { lock (_activeWorkItems) { _activeWorkItems.Add(composite); composite.Completed += OnWorkItemCompletion; } } switch (strategy) { default: case ParallelExecutionStrategy.Direct: await work.Execute(); break; case ParallelExecutionStrategy.Parallel: if (work.TargetApartment == ApartmentState.STA) { ParallelSTAQueue.Enqueue(work); } else { ParallelQueue.Enqueue(work); } break; case ParallelExecutionStrategy.NonParallel: if (work.TargetApartment == ApartmentState.STA) { NonParallelSTAQueue.Enqueue(work); } else { NonParallelQueue.Enqueue(work); } break; } }
public void TestFixtureStrategy(ParallelScope testScope, ParallelScope contextScope, ParallelExecutionStrategy expectedStrategy) { var strategy = MakeWorkItem(_testFixture, testScope, contextScope).ExecutionStrategy; Assert.That(strategy, Is.EqualTo(expectedStrategy)); }