private void OnStreamDeleted(InMemoryEventStream <T> stream)
        {
            InMemoryEventStream <T> removed;

            _streams.TryRemove(stream.Id, out removed);
            Debug.Assert(ReferenceEquals(removed, stream));
            stream.Deleted -= OnStreamDeleted;
        }
        /// <inheritdoc/>
        public async Task <IEventStream <T> > AddAsync(EventStreamId id)
        {
            Requires.NotDefault(id, nameof(id));

            var stream = new InMemoryEventStream <T>(id);

            if (!_streams.TryAdd(id, stream))
            {
                throw new EventStreamAlreadyExistsException(id);
            }
            stream.Deleted += OnStreamDeleted;
            return(stream);
        }