private AppendResult AppendToStreamInternal( string streamId, int expectedVersion, NewStreamMessage[] messages) { InMemoryStream inMemoryStream; if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any) { if (_streams.TryGetValue(streamId, out inMemoryStream)) { inMemoryStream.AppendToStream(expectedVersion, messages); } else { inMemoryStream = new InMemoryStream( streamId, _allStream, _getUtcNow, _onStreamAppended, () => _currentPosition++); inMemoryStream.AppendToStream(expectedVersion, messages); _streams.Add(streamId, inMemoryStream); } return(new AppendResult(inMemoryStream.CurrentVersion)); } if (!_streams.TryGetValue(streamId, out inMemoryStream)) { throw new WrongExpectedVersionException( ErrorMessages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } inMemoryStream.AppendToStream(expectedVersion, messages); return(new AppendResult(inMemoryStream.CurrentVersion)); }
protected override Task AppendToStreamInternal( string streamId, int expectedVersion, NewStreamEvent[] events, CancellationToken cancellationToken = new CancellationToken()) { if (_isDisposed) { throw new ObjectDisposedException(nameof(InMemoryEventStore)); } _lock.EnterWriteLock(); try { InMemoryStream inMemoryStream; // Should only add stream if NoStream if (expectedVersion == ExpectedVersion.NoStream || expectedVersion == ExpectedVersion.Any) { if (_streams.TryGetValue(streamId, out inMemoryStream)) { inMemoryStream.AppendToStream(expectedVersion, events); } else { inMemoryStream = new InMemoryStream( streamId, _allStream, _getUtcNow, _onStreamAppended); inMemoryStream.AppendToStream(expectedVersion, events); _streams.TryAdd(streamId, inMemoryStream); } return(Task.FromResult(0)); } if (!_streams.TryGetValue(streamId, out inMemoryStream)) { throw new WrongExpectedVersionException( Messages.AppendFailedWrongExpectedVersion(streamId, expectedVersion)); } inMemoryStream.AppendToStream(expectedVersion, events); return(Task.FromResult(0)); } finally { _lock.ExitWriteLock(); } }