Ejemplo n.º 1
0
        public ISubscription Subscribe(Action <string> messageReceivedAction)
        {
            var tokenSource = new CancellationTokenSource();

            SafeExecute.Sync(() => ThreadPool.QueueUserWorkItem(s => {
                var cancellationToken = (CancellationToken)s;
                while (!cancellationToken.IsCancellationRequested)
                {
                    SafeExecute.SyncCatch(
                        () => PollMessage(messageReceivedAction, cancellationToken),
                        () => Thread.Sleep(_options.WaitDuration));
                }
            }, tokenSource.Token));
            return(new DefaultSubscription(() => tokenSource.Cancel()));
        }
Ejemplo n.º 2
0
        private void PollMessage(Action <string> messageReceivedAction, CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                SafeExecute.SyncCatch(() =>
                {
                    var link    = GetLink();
                    var message = link.Receive(TimeSpan.FromMilliseconds(_options.PollingInterval));
                    if (message == null)
                    {
                        Thread.Sleep(_options.WaitDuration);
                        return;
                    }

                    link.Accept(message);
                    messageReceivedAction.Invoke((string)message.Body);
                }, () => Thread.Sleep(_options.WaitDuration));
            }
        }