private async Task <IEnumerable <List <long> > > GenerateValuesInMultipleThreads(int threadCount, int valueCount) { const int blockSize = 10; var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider(); var sequence = ((IMutableModel) new Model()).AddSequence("Foo"); sequence.IncrementBy = blockSize; var state = new SqlServerSequenceValueGeneratorState(sequence); var executor = new FakeRawSqlCommandBuilder(blockSize); var sqlGenerator = new SqlServerUpdateSqlGenerator( new UpdateSqlGeneratorDependencies( new SqlServerSqlGenerationHelper( new RelationalSqlGenerationHelperDependencies()), new SqlServerTypeMappingSource( TestServiceFactory.Instance.Create <TypeMappingSourceDependencies>(), TestServiceFactory.Instance.Create <RelationalTypeMappingSourceDependencies>()))); var logger = new FakeDiagnosticsLogger <DbLoggerCategory.Database.Command>(); var tests = new Func <Task> [threadCount]; var generatedValues = new List <long> [threadCount]; for (var i = 0; i < tests.Length; i++) { var testNumber = i; generatedValues[testNumber] = new List <long>(); tests[testNumber] = async() => { for (var j = 0; j < valueCount; j++) { var connection = CreateConnection(serviceProvider); var generator = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection, logger); var value = j % 2 == 0 ? await generator.NextAsync(null) : generator.Next(null); generatedValues[testNumber].Add(value); } }; } var tasks = tests.Select(Task.Run).ToArray(); foreach (var t in tasks) { await t; } return(generatedValues); }
private async Task <IEnumerable <List <long> > > GenerateValuesInMultipleThreads(int threadCount, int valueCount) { const int blockSize = 10; var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider(); var sequence = Sequence.GetOrAddSequence(new Model(), RelationalFullAnnotationNames.Instance.SequencePrefix, "Foo"); sequence.IncrementBy = blockSize; var state = new SqlServerSequenceValueGeneratorState(sequence); var executor = new FakeRawSqlCommandBuilder(blockSize); var sqlGenerator = new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerationHelper(), new SqlServerTypeMapper()); var tests = new Func <Task> [threadCount]; var generatedValues = new List <long> [threadCount]; for (var i = 0; i < tests.Length; i++) { var testNumber = i; generatedValues[testNumber] = new List <long>(); tests[testNumber] = async() => { for (var j = 0; j < valueCount; j++) { var connection = CreateConnection(serviceProvider); var generator = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection); var value = j % 2 == 0 ? await generator.NextAsync(null) : generator.Next(null); generatedValues[testNumber].Add(value); } }; } var tasks = tests.Select(Task.Run).ToArray(); foreach (var t in tasks) { await t; } return(generatedValues); }
private IEnumerable <List <long> > GenerateValuesInMultipleThreads(int threadCount, int valueCount) { const int blockSize = 10; var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider(); var state = new SqlServerSequenceValueGeneratorState( new Sequence( new Model(), RelationalFullAnnotationNames.Instance.SequencePrefix, "Foo") { IncrementBy = blockSize }); var executor = new FakeRawSqlCommandBuilder(blockSize); var sqlGenerator = new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerationHelper(), new SqlServerTypeMapper()); var tests = new Action[threadCount]; var generatedValues = new List <long> [threadCount]; for (var i = 0; i < tests.Length; i++) { var testNumber = i; generatedValues[testNumber] = new List <long>(); tests[testNumber] = () => { for (var j = 0; j < valueCount; j++) { var connection = CreateConnection(serviceProvider); var generator = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection); generatedValues[testNumber].Add(generator.Next()); } }; } Parallel.Invoke(tests); return(generatedValues); }
public FakeRelationalCommand(FakeRawSqlCommandBuilder commandBuilder) { _commandBuilder = commandBuilder; }