public async Task DequeueAsync()

in src/NMS.AMQP/Util/PriorityMessageQueue.cs [112:138]


        public async Task<InboundMessageDispatch> DequeueAsync(int timeout)
        {
            using(await syncRoot.LockAsync())
            {
                while (timeout != 0 && IsEmpty && !disposed)
                {
                    if (timeout == -1)
                    {
                        await syncRoot.WaitAsync();
                    }
                    else
                    {
                        long start = DateTime.UtcNow.Ticks / 10_000L;
                        await syncRoot.WaitAsync(timeout);
                        timeout = Math.Max(timeout + (int) (start - DateTime.UtcNow.Ticks / 10_000L), 0);
                    }
                }

                if (IsEmpty || disposed)
                {
                    return null;
                }

                return RemoveFirst();
            }

        }