Example #1
0
        public Task <PeerId> DequeueAsync(CancellationToken cancellationToken)
        {
            var tcs = new TaskCompletionSource <PeerId>();

            Task.Factory.StartNew(() =>
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    tcs.TrySetCanceled();
                    return;
                }

                if (_queue.Count > 0)
                {
                    var p = _queue.Dequeue();
                    tcs.TrySetResult(p);
                }
                else
                {
                    tcs.TrySetResult(null);
                }
            }, cancellationToken);

            return(tcs.Task);
        }