protected static Task<TestResponse> ProcessRequest(TestRequest request) { var testResponse = new TestResponse { RequestNumber = request.RequestNumber, ProcessingCompletionTime = DateTimeOffset.UtcNow, StartTime = request.StartTime }; Debug.WriteLine("Worker processed request: {0}", request.RequestNumber); return Task.FromResult(testResponse); }
public async Task<TimeSpan> SubmitRequestsAsync(int numRequests, int tps) { var delayBetweenRequests = TimeSpan.FromMilliseconds(1000.0/tps); var requestTimes = new ConcurrentQueue<TimeSpan>(); var responseTasks = new List<Task>(); for (int i = 0; i < numRequests; i++) { var stopwatch = Stopwatch.StartNew(); var request = new TestRequest { RequestNumber = i, StartTime = DateTimeOffset.UtcNow }; Debug.WriteLine("Submitting request {0}", i); var responseTask = serviceClient.SubmitRequestAsync(request, requestTimeout); Task continueWith = responseTask.ContinueWith(task => { var testResponse = task.Result; var now = DateTimeOffset.UtcNow; var processingTime = now - testResponse.StartTime; Debug.WriteLine("Request {0} took {1}", testResponse.RequestNumber, processingTime); requestTimes.Enqueue(processingTime); }); responseTasks.Add(continueWith); responseTasks.Add(responseTask); stopwatch.Stop(); var delayTime = delayBetweenRequests - stopwatch.Elapsed; if (delayTime > TimeSpan.Zero) { await Task.Delay(delayTime); } } await Task.WhenAll(responseTasks.ToArray()); if (!requestTimes.Any()) { throw new Exception("Failed to retrieve any results. Are you sure your queue names are configured correctly?"); } double averageMs = requestTimes.Select(t => t.TotalMilliseconds).Average(); return TimeSpan.FromMilliseconds(averageMs); }
public async Task<TimeSpan> SubmitRequestsAsync(int numRequests, int tps) { var delayBetweenRequests = TimeSpan.FromMilliseconds(1000.0 / tps); var requestTimes = new ConcurrentQueue<TimeSpan>(); var responseTasks = new List<Task>(); using (var client = new HttpClient()) { client.BaseAddress = serviceUri; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); for (int i = 0; i < numRequests; i++) { var stopwatch = Stopwatch.StartNew(); var request = new TestRequest { RequestNumber = i, StartTime = DateTimeOffset.UtcNow }; Debug.WriteLine("Submitting request {0}", i); // New code: Task<HttpResponseMessage> responseTask = client.PostAsJsonAsync("api/service/", request); Task continueWith = responseTask.ContinueWith( async task => { var response = task.Result; if (response.IsSuccessStatusCode) { var testResponse = await response.Content.ReadAsAsync<TestResponse>(); var now = DateTimeOffset.UtcNow; var processingTime = now - testResponse.StartTime; Debug.WriteLine("Request {0} took {1}", testResponse.RequestNumber, processingTime); requestTimes.Enqueue(processingTime); } }); responseTasks.Add(continueWith); responseTasks.Add(responseTask); stopwatch.Stop(); var delayTime = delayBetweenRequests - stopwatch.Elapsed; if (delayTime > TimeSpan.Zero) { await Task.Delay(delayTime); } } await Task.WhenAll(responseTasks.ToArray()); } if (!requestTimes.Any()) { throw new Exception("Failed to retrieve any results. Are you sure your queue names are configured correctly?"); } double averageMs = requestTimes.Select(t => t.TotalMilliseconds).Average(); return TimeSpan.FromMilliseconds(averageMs); }
public async Task <TimeSpan> SubmitRequestsAsync(int numRequests, int tps) { var delayBetweenRequests = TimeSpan.FromMilliseconds(1000.0 / tps); var requestTimes = new ConcurrentQueue <TimeSpan>(); var responseTasks = new List <Task>(); using (var client = new HttpClient()) { client.BaseAddress = serviceUri; client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); for (int i = 0; i < numRequests; i++) { var stopwatch = Stopwatch.StartNew(); var request = new TestRequest { RequestNumber = i, StartTime = DateTimeOffset.UtcNow }; Debug.WriteLine("Submitting request {0}", i); // New code: Task <HttpResponseMessage> responseTask = client.PostAsJsonAsync("api/service/", request); Task continueWith = responseTask.ContinueWith( async task => { var response = task.Result; if (response.IsSuccessStatusCode) { var testResponse = await response.Content.ReadAsAsync <TestResponse>(); var now = DateTimeOffset.UtcNow; var processingTime = now - testResponse.StartTime; Debug.WriteLine("Request {0} took {1}", testResponse.RequestNumber, processingTime); requestTimes.Enqueue(processingTime); } }); responseTasks.Add(continueWith); responseTasks.Add(responseTask); stopwatch.Stop(); var delayTime = delayBetweenRequests - stopwatch.Elapsed; if (delayTime > TimeSpan.Zero) { await Task.Delay(delayTime); } } await Task.WhenAll(responseTasks.ToArray()); } if (!requestTimes.Any()) { throw new Exception("Failed to retrieve any results. Are you sure your queue names are configured correctly?"); } double averageMs = requestTimes.Select(t => t.TotalMilliseconds).Average(); return(TimeSpan.FromMilliseconds(averageMs)); }