public async Task <bool> ShouldMakeSnapShot(AggregateRoot aggregate) { if (!IsSnapshotable(aggregate.GetType())) { return(false); } var i = aggregate.Version; for (var j = 0; j < aggregate.GetUncommittedChanges().Length; j++) { if (++i % _snapshotInterval == 0 && i != 0) { return(true); } if (i >= _snapshotInterval && !await _snapshotStore.ExistsAsync(aggregate.Id).ConfigureAwait(false)) { return(true); } } return(false); }