in src/ReceivingAmqpLink.cs [782:825]
void DoCheckWaiter()
{
if (!this.Settings.AutoSendFlow)
{
bool sendFlow = false;
lock (this.SyncRoot)
{
int count = this.waiterManager.ResetRequestCount();
if (count > 0)
{
this.LinkCredit += (uint)count;
sendFlow = true;
}
}
if (sendFlow)
{
this.SendFlow(false);
}
}
if (this.messageQueue.IsEmpty)
{
return;
}
ReceiveAsyncResult waiter = this.waiterManager.PeekWaiter();
while (waiter != null && this.messageQueue.TryPeek(out AmqpMessage message))
{
if (waiter.TryAdd(message))
{
this.messageQueue.TryDequeue(out _);
if (waiter.MessageCount >= waiter.RequestedMessageCount)
{
waiter.Signal(false, null);
waiter = this.waiterManager.PeekWaiter();
}
}
else
{
waiter = this.waiterManager.PeekWaiter();
}
}
}