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); }
/// <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)); }