Example #1
0
        public static List <HerculesEvent>[] ReadEvents(
            this IHerculesStreamClient client,
            string stream,
            int count,
            int limit,
            int clientShards,
            StreamCoordinates coordinates = null)
        {
            var timeout = 30.Seconds();

            var stopwatch  = Stopwatch.StartNew();
            var eventsRead = 0;

            var clientShardTasks = Enumerable.Range(0, clientShards).Select(ReadSingleClientShard);

            var events = Task.WhenAll(clientShardTasks).GetAwaiter().GetResult();

            events.Sum(x => x.Count).Should().Be(count);
            return(events);

            async Task <List <HerculesEvent> > ReadSingleClientShard(int clientShard)
            {
                var shardEvents = new List <HerculesEvent>();
                var readQuery   = new ReadStreamQuery(stream)
                {
                    Limit            = limit,
                    Coordinates      = coordinates ?? StreamCoordinates.Empty,
                    ClientShard      = clientShard,
                    ClientShardCount = clientShards
                };

                while (stopwatch.Elapsed < timeout && eventsRead < count)
                {
                    var result = await client.ReadAsync(readQuery, timeout);

                    result.IsSuccessful.Should().BeTrue();

                    var eventsFromResponse = result.Payload.Events;

                    shardEvents.AddRange(eventsFromResponse);
                    readQuery.Coordinates = result.Payload.Next;
                    Interlocked.Add(ref eventsRead, eventsFromResponse.Count);
                    await Task.Delay(100);
                }

                return(shardEvents);
            }
        }
Example #2
0
            public async Task <ReadStreamResult <HerculesEvent> > ReadAsync(ReadStreamQuery query, TimeSpan timeout, CancellationToken cancellationToken = default)
            {
                var result = await client.ReadAsync(query, timeout, cancellationToken).ConfigureAwait(false);

                return(result.ToGenericResult());
            }
Example #3
0
 public static ReadStreamResult Read(
     [NotNull] this IHerculesStreamClient client,
     [NotNull] ReadStreamQuery query,
     TimeSpan timeout,
     CancellationToken cancellationToken = default) =>
 client.ReadAsync(query, timeout, cancellationToken).GetAwaiter().GetResult();