Пример #1
0
        public BatchOperationResponse Execute(BatchOperationRequest request)
        {
            var adjacentGroups = GetAdjacentGroups(request.Operations);
            var results        = new List <OperationResult>();

            foreach (var kvp in adjacentGroups)
            {
                if (kvp.Key == ProcessingType.Serial)
                {
                    results.AddRange(ProcessSerial(request.FaultCancellationOption, request.Arguments, GetExecutors(kvp.Value)));
                }
                else
                {
                    results.AddRange(ProcessParallel(request.FaultCancellationOption, request.Arguments, GetExecutors(kvp.Value)));
                }

                if (request.FaultCancellationOption == FaultCancellationOption.Cancel && results.Any(x => x.IsFaulted))
                {
                    break;
                }
            }

            return(new BatchOperationResponse {
                Results = results
            });
        }
        public void OperationAggregatorUsingParallel()
        {
            var expected = new BatchOperationResponse
            {
                Results = new List <OperationResult>
                {
                    new OperationResult
                    {
                        Value = "1"
                    }
                }
            };

            var request = new BatchOperationRequest
            {
                Operations = CreateOperations(ProcessingType.Parallel),
                Arguments  = new List <OperationArgument> {
                    new OperationArgument {
                        Name = "Operation Args", Value = "1"
                    }
                }
            };

            var result = _operationAggregator.Execute(request);

            Assert.AreEqual(expected.Results.First().Value, result.Results.First().Value);
        }