void DoCheckWaiter()

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