public static async Task WaitForConnectAsync(this IManagedMqttClient client, CancellationToken token = default)
        {
            var asyncManualResetEvent = new Nito.AsyncEx.AsyncManualResetEvent(false);
            var oldHandler            = client.ConnectedHandler;

            client.UseConnectedHandler(e =>
            {
                asyncManualResetEvent.Set();
            });

            await asyncManualResetEvent.WaitAsync(token);

            client.ConnectedHandler = oldHandler;
        }
        // ReSharper disable once NotNullMemberIsNotInitialized
        public MitarMonitorController([NotNull] IWorkerController workerController)
        {
            _workerController = workerController ?? throw new ArgumentNullException(nameof(workerController));

            IsConnected = false;

            _isCommonParamsRequested   = 0;
            _isPressureParamsRequested = 0;
            _isEcgParamsRequested      = 0;

            _commonParamsReady       = new Nito.AsyncEx.AsyncManualResetEvent(false);
            _pressureParamsReady     = new Nito.AsyncEx.AsyncManualResetEvent(false);
            _ecgParamsReady          = new Nito.AsyncEx.AsyncManualResetEvent(false);
            _pumpingReady            = new Nito.AsyncEx.AsyncManualResetEvent(false);
            _pumpingStatus           = PumpingStatus.Completed;
            _updateDataSyncSemaphore = new SemaphoreSlim(1, 1);


            _ecgValues      = new ConcurrentQueue <short>();
            _lastExceptions = new ConcurrentQueue <Exception>();
        }