public IntModelIncrementThreeEtor(RestrictionTester restrictionTester) { _restrictionTester = restrictionTester; }
public async Task AsyncPipeMultipleExecutionsWithRestriction() { var restriction = new RestrictionTester(); var execIncOne = new IntModelIncrementOneEtor(); var execIncTwo = new IntModelIncrementTwoEtor(); var execIncThree = new IntModelIncrementThreeEtor(restriction); var pipe = PipeBuilder .AsyncPipe <IntModel, int>() .Executor(execIncOne).Label("exec_1").Add() .Executor(execIncTwo).Label("exec_2").Add() .Executor(execIncThree).Label("exec_3") .Restricted(3, "rest_1") .Add() .Return((model, results) => { Assert.Equal(3, results.Length); return(PipeResult <int> .DefaultSuccessful .SetValue(model.Integer)); }); var execIncOne1 = new IntModelIncrementOneEtor(); var execIncTwo1 = new IntModelIncrementTwoEtor(); var execIncThree1 = new IntModelIncrementThreeEtor(restriction); var pipe1 = PipeBuilder .AsyncPipe <IntModel, int>() .Executor(execIncOne1).Label("exec_1").Add() .Executor(execIncTwo1).Label("exec_2").Add() .Executor(execIncThree1).Label("exec_3") .Restricted(3, "rest_1") .Add() .Return((model, results) => { Assert.Equal(3, results.Length); return(PipeResult <int> .DefaultSuccessful .SetValue(model.Integer)); }); var execIncOne2 = new IntModelIncrementOneEtor(); var execIncTwo2 = new IntModelIncrementTwoEtor(); var execIncThree2 = new IntModelIncrementThreeEtor(restriction); var pipe2 = PipeBuilder .AsyncPipe <IntModel, int>() .Executor(execIncOne2).Label("exec_1").Add() .Executor(execIncTwo2).Label("exec_2").Add() .Executor(execIncThree2).Label("exec_3") .Restricted(3, "rest_1") .Add() .Return((model, results) => { Assert.Equal(3, results.Length); return(PipeResult <int> .DefaultSuccessful .SetValue(model.Integer)); }); var execIncOne3 = new IntModelIncrementOneEtor(); var execIncTwo3 = new IntModelIncrementTwoEtor(); var execIncThree3 = new IntModelIncrementThreeEtor(restriction); var pipe3 = PipeBuilder .AsyncPipe <IntModel, int>() .Executor(execIncOne3).Label("exec_1").Add() .Executor(execIncTwo3).Label("exec_2").Add() .Executor(execIncThree3).Label("exec_3") .Restricted(3, "rest_1") .Add() .Return((model, results) => { Assert.Equal(3, results.Length); return(PipeResult <int> .DefaultSuccessful .SetValue(model.Integer)); }); var execIncOne4 = new IntModelIncrementOneEtor(); var execIncTwo4 = new IntModelIncrementTwoEtor(); var execIncThree4 = new IntModelIncrementThreeEtor(restriction); var pipe4 = PipeBuilder .AsyncPipe <IntModel, int>() .Executor(execIncOne4).Label("exec_1").Add() .Executor(execIncTwo4).Label("exec_2").Add() .Executor(execIncThree4).Label("exec_3") .Restricted(3, "rest_1") .Add() .Return((model, results) => { Assert.Equal(3, results.Length); return(PipeResult <int> .DefaultSuccessful .SetValue(model.Integer)); }); var length = 20; var array = new int[length]; for (int i = 0; i < length; i++) { var pipeTask = pipe.ExecuteAsync(new IntModel { Integer = 0 }); var pipeTask1 = pipe1.ExecuteAsync(new IntModel { Integer = 0 }); var pipeTask2 = pipe2.ExecuteAsync(new IntModel { Integer = 0 }); var pipeTask3 = pipe3.ExecuteAsync(new IntModel { Integer = 0 }); var pipeTask4 = pipe4.ExecuteAsync(new IntModel { Integer = 0 }); var results = await Task.WhenAll(pipeTask, pipeTask1, pipeTask2, pipeTask3, pipeTask4); Assert.True(restriction.MaxCount < 4); array[i] = restriction.MaxCount; } var avg = array.Average(); var max = array.Max(); }