private void WatchdogRoutine() { while (!_cts.IsCancellationRequested) { if (_watchDogActive) { var state = EcHL.ReadState(this.Context); if (state < 8) { _statusCheckFailedCounter++; if (_statusCheckFailedCounter >= _settings.MaxRetries) { try { lock (_lock) { _isReconfiguring = true; _logger.LogInformation("reconfiguration started"); } this.Configure(); _logger.LogInformation("reconfiguration successful"); _isReconfiguring = false; } catch (Exception) { _logger.LogWarning("reconfiguration failed"); } finally { _statusCheckFailedCounter = 0; } } } else { if (_isReconfiguring) { _logger.LogInformation("communication restored"); _isReconfiguring = false; } _statusCheckFailedCounter = 0; } } _cts.Token.WaitHandle.WaitOne(TimeSpan.FromSeconds(_settings.WatchdogSleepTime)); } }