public async Task <T> GetAsync(T snapshoot, CancellationToken cancellationToken) { if (!snapshoot.IsVersionSync) { throw new VersionNotAccurateException(); } var snapshootVersion = snapshoot.Version; var lastVersion = await EventStore.GetAggregateLastVersionAsync(AggregateType, snapshoot.Id, cancellationToken); if (snapshootVersion < lastVersion) { var events = await EventStore.GetAggregateEvents(AggregateType, snapshoot.Id, snapshootVersion, cancellationToken).ToListAsync(cancellationToken); snapshoot.UpdateFromStore(events); } Aggregates.TryAdd(snapshoot.Id, snapshoot); EventStore.TryAddEventContainer(snapshoot); return(snapshoot); }