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 DOTNET || NETFX_CORE waiter = callback == null ? (Waiter) new SyncWaiter() : new AsyncWaiter(this, callback); #else waiter = new SyncWaiter(); #endif this.waiterList.Add(waiter); } return(waiter.Wait(timeout)); }
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); }