public IAsyncResult BeginPoll(string device, string operation, AsyncCallback callback, object state)
        {
            var pollCompletionSource = new PollCompletionSource(device, operation, callback, state);

            NotificationListener.Create().Register(device, operation, pollCompletionSource);
            return(pollCompletionSource.Task);
        }
        public void Register(string device, string operation, PollCompletionSource pollCompletionSource)
        {
            try
            {
                _disposing.EnterReadLock();

                if (_disposed || _cancellationSource.IsCancellationRequested)
                {
                    throw new ObjectDisposedException(GetType().FullName);
                }

                _devices.AddOrUpdate(string.Format(FORMAT_KEY_DEVICE, device, operation), pollCompletionSource,
                                     (ekey, epcs) =>
                {
                    epcs.Done();
                    return(pollCompletionSource);
                });
            }
            finally
            {
                _disposing.ExitReadLock();
            }
        }