Beispiel #1
0
        // 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;
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
        }