Esempio n. 1
0
        private async Task <ChannelReader <ValueTask <RequestSummary> > > BuildUserRequestChannelReader(
            Stage stage,
            CancellationToken cancellationToken)
        {
            var totalRequests = stage.Requests;

            var requestChannel = Channel.CreateBounded <ValueTask <RequestSummary> >(
                new BoundedChannelOptions(totalRequests)
            {
                SingleReader = false,
                SingleWriter = true
            });

            _logger.LogInformation($"Building bounded request channel: {totalRequests}");

            // Separate producer thread
            await Run(() =>
            {
                Enumerable
                .Range(0, totalRequests)
                .ToList()
                .ForEach(async _ =>
                {
                    var request = _requestClient.RecordRequestAsync(
                        GetRandomUrl(),
                        stage,
                        _configuration.Headers,
                        cancellationToken);

                    await requestChannel.Writer.WriteAsync(request, cancellationToken);
                });

                requestChannel.Writer.TryComplete();
            }, cancellationToken);

            return(requestChannel.Reader);
        }