protected override Task <ListStreamsPage> ListStreamsInternal( Pattern pattern, int maxCount, string continuationToken, ListNextStreamsPage listNextStreamsPage, CancellationToken cancellationToken) { Ensure.That(listNextStreamsPage).IsNotNull(); int.TryParse(continuationToken, out var index); Func <string, bool> filter = default; switch (pattern) { case Pattern.Any _: filter = s => true; break; case Pattern.StartingWith p: filter = s => s?.StartsWith(p.Value) ?? false; break; case Pattern.EndingWith p: filter = s => s?.EndsWith(p.Value) ?? false; break; default: throw Pattern.Unrecognized(nameof(pattern)); } using (_lock.UseReadLock()) { var streamIds = _streamIds .Skip(index) .Where(filter) .Take(maxCount) .ToArray(); var nextContinuationToken = streamIds.Length == 0 ? 0 : _streamIds.IndexOf(streamIds[streamIds.Length - 1]) + 1; return(Task.FromResult(new ListStreamsPage( nextContinuationToken.ToString(), streamIds, listNextStreamsPage))); } }
protected override async Task <ListStreamsPage> ListStreamsInternal( Pattern pattern, int maxCount, string continuationToken, ListNextStreamsPage listNextStreamsPage, CancellationToken cancellationToken) { GuardAgainstDisposed(); cancellationToken.ThrowIfCancellationRequested(); using (var connection = OpenConnection()) { var headers = await connection.AllStream() .List(pattern, maxCount, continuationToken, cancellationToken); var token = headers.Any() ? headers.Last().Key.ToString() : Position.End.ToString(); return(new ListStreamsPage(token, headers.Select(h => h.IdOriginal).ToArray(), listNextStreamsPage)); } }
protected abstract Task <ListStreamsPage> ListStreamsInternal( Pattern pattern, int maxCount, string continuationToken, ListNextStreamsPage listNextStreamsPage, CancellationToken cancellationToken);