public async Task SendMessageAsync(RunnerStats stats, CancellationToken cancellationToken) { var msg = this.CreateMessage(); for (var attempt = 1; attempt <= MaxSendAttempts; ++attempt) { try { await this.SendAsync(msg, cancellationToken); stats.IncrementMessageSent(); if (this.Config.DuplicateEvery <= 0 || this.random.Next(this.Config.DuplicateEvery) != 0) { break; } attempt = 1; } catch (Exception ex) when(this.IsTransientException(ex)) { stats.IncrementSendTelemetryErrors(); await Task.Yield(); } catch (Exception) { stats.IncrementSendTelemetryErrors(); await Task.Delay(WaitTimeOnTransientError); } } }
private async Task SendMessageAsync(RunnerStats stats, CancellationToken cancellationToken) { const int MaxAttempts = 3; var msg = CreateMessage(); for (var attempt = 1; attempt <= MaxAttempts; ++attempt) { try { await deviceClient.SendEventAsync(msg, cancellationToken); stats.IncrementMessageSent(); break; } catch (IotHubCommunicationException) { stats.IncrementSendTelemetryErrors(); await Task.Yield(); } catch (IotHubException) { stats.IncrementSendTelemetryErrors(); await Task.Delay(WaitTimeOnIotHubError); } } }