private void CardsMonitoring()
        {
            var messageBus = _messageBusFactory.Create();

            Task.Factory.StartNew(async() =>
            {
                do
                {
                    _lockEvent.WaitOne();
                    try
                    {
                        var ctrlGpu        = new ControlMemory();
                        var voltageMonitor = new HardwareMonitor();
                        var voltage        = new List <VoltageInfo>();
                        var temp           = new List <TempInfo>();

                        foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 96))
                        {
                            voltage.Add(new VoltageInfo {
                                Current = vol.Data, Max = vol.MaxLimit, CardId = vol.GPU
                            });
                        }
                        messageBus.Handle(new AutobernerVoltageCardsInfoMessage {
                            VoltageInfoModel = voltage.ToArray()
                        });

                        foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 0))
                        {
                            temp.Add(new TempInfo {
                                Current = vol.Data, CardId = vol.GPU
                            });
                        }
                        messageBus.Handle(new AutobernerTempCardsInfoMessage {
                            TempInfoModel = temp.ToArray()
                        });

                        ctrlGpu.Connect();
                        ctrlGpu.ReloadAll();
                        ctrlGpu.Reinitialize();

                        var actualList = FindCards(ctrlGpu);

                        messageBus.Handle(new AutobernerInformationMessage {
                            CurrentInfoCards = actualList.ToList()
                        });
                        ctrlGpu.Disconnect();
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"CardsMonitoring error: {ex.Message}");
                    }
                    await Task.Delay(_config.MonitoringInterval, _token.Token);
                } while (!_token.IsCancellationRequested);
            }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default)
            .ContinueWith((x) =>
            {
                messageBus.Handle <AutobernerStopWatchingMessage>();
            },
                          TaskContinuationOptions.OnlyOnFaulted);
        }
        private void CardsMonitoring(CardParam[] configCards)
        {
            var messageBus = _messageBusFactory.Create();

            Task.Factory.StartNew(async() =>
            {
                do
                {
                    _lockEvent.WaitOne();
                    try
                    {
                        var ctrlGpu = new ControlMemory();
                        ctrlGpu.Connect();
                        ctrlGpu.ReloadAll();
                        ctrlGpu.Reinitialize();

                        var actualList = FindCards(ctrlGpu);

                        ctrlGpu.Disconnect();

                        if (_config.WatchDog)
                        {
                            WatchDog(configCards, actualList);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"CardsMonitoring error: {ex.Message}");
                    }
                    await Task.Delay(_config.MonitoringInterval, _token.Token);
                } while (!_token.IsCancellationRequested);
            }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default)
            .ContinueWith((x) =>
            {
                messageBus.Publish <AutobernerStopWatchingMessage>();
            },
                          TaskContinuationOptions.OnlyOnFaulted);
        }