public async Task <TAggregate> Load(string aggregateId) { var aggregate = new TAggregate(); var streamName = _streamNameProvider.GetStreamName(Type, aggregateId); var events = await _eventPersistenceClient.Load(streamName, SubscribedEventTypes); if (events.Any()) { aggregate.Load(events); } return(aggregate); }
public async Task concurrent_append_to_stream_events_should_be_ordered() { var existingCar = await _aggregateRootRepository.GetAsync(_fakeCarId); var taskList = new Task[30]; for (int i = 0; i < 30; i++) { taskList[i] = Task.Run(() => { try { WithUnitOfWorkAsync(async() => { Car.ChangeName(existingCar.Value, $"Fake-{i.ToString()}"); }).ConfigureAwait(false).GetAwaiter().GetResult(); } catch { } }); } await Task.WhenAll(taskList); var streamId = _streamNameProvider.GetStreamName(typeof(CarState), _fakeCarId); var streamEvents = await _cosmosDBConnection.ReadStreamEventsForwardAsync(streamId, 1, 1000); var eventCount = streamEvents.Value.Events.Length; var distinctedCount = streamEvents.Value.Events.ToList().Select(e => e.Position) .Distinct() .Count(); eventCount.Should().Be(distinctedCount); }