Beispiel #1
0
        private static HttpRequestMessage MapToHttpRequestMessage(KRequest kRequest)
        {
            var httpRequestMessage = new HttpRequestMessage(kRequest.Method, kRequest.Uri)
            {
                Content = kRequest.Content
            };

            foreach (var header in kRequest.Headers)
            {
                httpRequestMessage.Headers.Add(header.Key, header.Value);
            }

            return(httpRequestMessage);
        }
Beispiel #2
0
        /// <summary>
        /// Sends the request.
        /// </summary>
        /// <param name="request">Valid KRequest object.</param>
        /// <returns></returns>
        public async Task <KResponse[]> SendAsync(KRequest request)
        {
            if (request == null)
            {
                return(Array.Empty <KResponse>());
            }

            var requests = new List <Task <KResponse> >();
            int numberOfBatchesPerSecond = (int)Math.Ceiling(Convert.ToDouble(RequestsPerSecond) / Convert.ToDouble(BatchSize));
            int interval = (int)Math.Floor(Convert.ToDouble(1000 / numberOfBatchesPerSecond));

            int totalRequestsInTheCurrentBatch    = 0;
            int totalRequestsInTheCurrentInterval = 0;
            int requestId = 0;
            int delay     = 0;

            while (requestId < RequestsPerSecond * Repetition)
            {
                requests.Add(SendWithDelayAsync(
                                 delay: delay,
                                 request: MapToHttpRequestMessage(request),
                                 includeResponseBodyInResult: IncludeResponseBodyInResult));

                totalRequestsInTheCurrentBatch++;
                totalRequestsInTheCurrentInterval++;

                if (totalRequestsInTheCurrentBatch >= BatchSize)
                {
                    delay += interval;
                    totalRequestsInTheCurrentBatch = 0;
                }

                if (totalRequestsInTheCurrentInterval >= RequestsPerSecond)
                {
                    delay += interval;
                    totalRequestsInTheCurrentBatch    = 0;
                    totalRequestsInTheCurrentInterval = 0;
                }

                requestId++;
            }

            return(await Task.WhenAll(requests).ConfigureAwait(false));
        }