public async Task <MetricsRun> SaveMetricsRun(MetricsRun metricsRunEntity) { var existingEntity = await this.Context.MetricsRuns.FindAsync(metricsRunEntity.MetricRunId); if (existingEntity == null) { this.Context.MetricsRuns.Add(metricsRunEntity); } else { this.Context.MetricsRuns.Update(metricsRunEntity); } await this.Context.SaveChangesAsync(); return(await this.Context.MetricsRuns.FindAsync(metricsRunEntity.MetricRunId)); }
public async Task <WebServiceMetricsResponse> RunMetrics(WebServiceMetricsRequest request) { var response = new WebServiceMetricsResponse { WebServiceMetricsRequestMeasured = request }; var metricsRunEntity = new MetricsRun() { RequestBody = request.RequestBody, RequestUrl = request.RequestUrl, NumberOfRequestsToSend = request.NumberOfRequestsToSend }; using (var repository = new MetricsRepository()) { metricsRunEntity = await repository.SaveMetricsRun(metricsRunEntity); } response.WebServiceMetricsRunId = metricsRunEntity.MetricRunId; var tasks = new List <Task>(); using (var semaphore = new SemaphoreSlim(10)) { for (int i = 0; i < request.NumberOfRequestsToSend; i++) { await semaphore.WaitAsync(); tasks.Add(MeasureRequest(semaphore, request, response)); } await Task.WhenAll(tasks); } return(response); }