Amqp.ReceiverLink.ReceiveInternal C# (CSharp) Метод

ReceiveInternal() приватный Метод

private ReceiveInternal ( MessageCallback callback, int timeout = 60000 ) : Amqp.Message
callback MessageCallback
timeout int
Результат Amqp.Message
        internal Message ReceiveInternal(MessageCallback callback, int timeout = 60000)
        {
            this.ThrowIfDetaching("Receive");
            if (this.totalCredit < 0)
            {
                this.SetCredit(DefaultCredit, true);
            }

            Waiter waiter = null;
            lock (this.ThisLock)
            {
                MessageNode first = (MessageNode)this.receivedMessages.First;
                if (first != null)
                {
                    this.receivedMessages.Remove(first);
                    this.OnDeliverMessage();
                    return first.Message;
                }

                if (timeout == 0)
                {
                    return null;
                }

#if NETFX || NETFX40 || DOTNET || NETFX_CORE || WINDOWS_STORE || WINDOWS_PHONE
                waiter = callback == null ? (Waiter)new SyncWaiter() : new AsyncWaiter(this, callback);
#else
                waiter = new SyncWaiter();
#endif
                this.waiterList.Add(waiter);
            }

            return waiter.Wait(timeout);
        }
        

Usage Example

Пример #1
0
        /// <summary>
        /// Receives a message asynchronously.
        /// </summary>
        /// <param name="receiver">The link.</param>
        /// <param name="timeout">The timeout in seconds.</param>
        /// <returns></returns>
        public static Task <Message> ReceiveAsync(this ReceiverLink receiver, int timeout = 60000)
        {
            TaskCompletionSource <Message> tcs = new TaskCompletionSource <Message>();

            try
            {
                var message = receiver.ReceiveInternal(
                    (l, m) => tcs.SetResult(m),
                    timeout);
                if (message != null)
                {
                    tcs.SetResult(message);
                }
            }
            catch (Exception exception)
            {
                tcs.SetException(exception);
            }

            return(tcs.Task);
        }
All Usage Examples Of Amqp.ReceiverLink::ReceiveInternal