private void UpdateTelemetry(ITelemetry07 telemetry)
        {
            const int maxErrors = 3; // TODO: extract common constant for all telemetry updateables

            if (telemetry == null && _errorCounts < maxErrors)
            {
                return;
            }
            Parameter01Vm.UpdateTelemetry(telemetry?.Mcw);
        }
        public void InCycleAction()
        {
            var waiter = new ManualResetEvent(false);
            var cmd    = new ReadTelemetry07Command();

            _commandSenderHost.Sender.SendCommandAsync(_targerAddressHost.TargetAddress,
                                                       cmd, TimeSpan.FromSeconds(0.1), 2,
                                                       (exception, bytes) =>
            {
                ITelemetry07 telemetry = null;
                try
                {
                    if (exception != null)
                    {
                        throw new Exception("Произошла ошибка во время обмена", exception);
                    }
                    var result   = cmd.GetResult(bytes);
                    _errorCounts = 0;
                    telemetry    = result;
                }
                catch (Exception ex)
                {
                    _errorCounts++;     // TODO: потенциально опасная ситуация (переполнение инта (примерно через 233 часа при опросе телеметрии раз в 50 милисекунд)
                    telemetry = null;
                    //_logger.Log("Ошибка: " + ex.Message);
                    //Console.WriteLine(ex);
                }
                finally
                {
                    _uiRoot.Notifier.Notify(() => { UpdateTelemetry(telemetry); });
                    waiter.Set();
                }
            });
            waiter.WaitOne();
            waiter.Reset();
        }