private async Task DoWorkAsync() { while (!_cancellationToken.IsCancellationRequested) { try { _logger.LogDebug("Exporting metrics to Stackdriver..."); var stopwatch = Stopwatch.StartNew(); await _recorder.FlushAsync(this); stopwatch.Stop(); _logger.LogDebug("Exporting metrics to Stackdriver finished"); var delay = _options.ExportInterval - stopwatch.Elapsed; if (delay.TotalMilliseconds > 0) { await Task.Delay(delay, _cancellationToken); } } catch (Exception e) { _logger.LogWarning(e, "Failed to export metrics to Stackdriver"); if (!_cancellationToken.IsCancellationRequested) { await Task.Delay(_options.ExportInterval, _cancellationToken); } } } _logger.LogInformation("Stackdriver metric exporter stopped"); }