public async Task ReportMetricAsync(string metricName, string metricDescription, ScrapeResult scrapeResult) { Guard.NotNullOrEmpty(metricName, nameof(metricName)); Guard.NotNull(scrapeResult, nameof(scrapeResult)); Guard.NotNull(scrapeResult.MetricValues, nameof(scrapeResult.MetricValues)); var reportMetricTasks = new List <Task>(); foreach (var measuredMetric in scrapeResult.MetricValues) { var metricValue = DetermineMetricMeasurement(measuredMetric); var metricDefinition = _metricsDeclarationProvider.GetPrometheusDefinition(metricName); var defaultLabels = _metricsDeclarationProvider.GetDefaultLabels(); var metricLabels = DetermineLabels(metricDefinition, scrapeResult, measuredMetric, defaultLabels); var reportMetricTask = ReportMetricAsync(metricName, metricDescription, metricValue, metricLabels); reportMetricTasks.Add(reportMetricTask); } await Task.WhenAll(reportMetricTasks); }