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();
}
}