public async Task Execute(string[] args) { // run to establish an initial connection. await Task.Run(() => { var id = Guid.NewGuid(); var pendingEvent = _factory.Create(new ShoppingCart(id), new ShoppingCartCreated(Guid.NewGuid())); return(_store.Append(id, 0, new[] { pendingEvent })); }); Console.WriteLine("=====================================\n"); Console.WriteLine("Starting event store throughtput test.\n"); var stopWatch = new Stopwatch(); var tasks = new List <Task>(); var max = 10000; Console.WriteLine($"Testing {max} events.\n"); stopWatch.Start(); for (var x = 0; x < max; x++) { tasks.Add(Task.Run(() => { var id = Guid.NewGuid(); var pendingEvent = _factory.Create(new ShoppingCart(id), new ShoppingCartCreated(Guid.NewGuid())); return(_store.Append(id, 0, new[] { pendingEvent })); })); } var masterTask = Task.WhenAll(tasks); while (!masterTask.IsCompleted) { var numberCompleted = tasks.Where(e => e.IsCompleted).Count(); Console.Write($"\r{numberCompleted}"); } stopWatch.Stop(); var time = stopWatch.Elapsed; Console.WriteLine($" shopping carts took {time.TotalSeconds:#.##} seconds.\n"); Console.WriteLine($"Throughput: {max / time.TotalSeconds:#.##} per second.\n"); Console.WriteLine("=====================================\n"); }
private IEnumerable <IPendingEvent> GetPendingEvents(T aggregate) { foreach (var @event in aggregate.PendingEvents) { yield return(_eventFactory.Create(aggregate, @event)); } }