public async Task Save <TAggregate>(TAggregate aggregate) where TAggregate : Aggregate { if (aggregate == null) { throw new ArgumentNullException("aggregate"); } // test for uncommitted save unsaved changes var uncommittedEvents = aggregate.GetUncommittedEvents().ToArray(); if (uncommittedEvents.Any() == false) { return; // Task.FromResult(0); } string streamName = _eventStreamNameResolver.Resolve <TAggregate>(aggregate.AggregateId); //// append events to stream //var task = _eventStore.AppendToEventStream(streamName, aggregate.CommittedVersion, uncommittedEvents); //return task.ContinueWith((t) => { // _eventPublisher.Publish(aggregate.AggregateId, uncommittedEvents); // // commit aggregate (e.g. reset) // aggregate.Commit(); // //return Task.FromResult(0); //}); //// publish events await _eventStore.AppendToEventStream(streamName, aggregate.CommittedVersion, uncommittedEvents); // publish events _eventPublisher.Publish(aggregate.AggregateId, uncommittedEvents); // commit aggregate (e.g. reset) aggregate.Commit(); }