public AsyncQueueReader(InputQueue <T> inputQueue, TimeSpan timeout, AsyncCallback callback, object state) : base(callback, state) { this.inputQueue = inputQueue; if (timeout != TimeSpan.MaxValue) { this.timer = new Timer(timerCallback, this, timeout, TimeSpan.FromMilliseconds(-1));//到期后将自身从队列中移除,只执行一次 } }
internal UdpChannelListener(UdpTransportBindingElement bindingElement, BindingContext context) : base(context.Binding) { this.maxMessageSize = (int)bindingElement.MaxReceivedMessageSize; this.multicast = bindingElement.Multicast; this.bufferManager = BufferManager.CreateBufferManager(bindingElement.MaxBufferPoolSize, this.maxMessageSize); MessageEncodingBindingElement messageEncoderBindingElement = context.BindingParameters.Remove <MessageEncodingBindingElement>(); if (messageEncoderBindingElement != null) { this.messageEncoderFactory = messageEncoderBindingElement.CreateMessageEncoderFactory(); } else { this.messageEncoderFactory = UdpConstants.DefaultMessageEncoderFactory; } this.channelQueue = new InputQueue <IInputChannel>(); this.currentChannelLock = new object(); this.listenSockets = new List <Socket>(2); Uri baseAddress = context.ListenUriBaseAddress; if (baseAddress == null) { if (context.ListenUriMode == ListenUriMode.Unique) { UriBuilder uriBuilder = new UriBuilder(this.Scheme, Dns.GetHostEntry(String.Empty).HostName); uriBuilder.Path = Guid.NewGuid().ToString(); baseAddress = uriBuilder.Uri; } else { throw new InvalidOperationException( "Null is only a supported value for ListenUriBaseAddress when using ListenUriMode.Unique."); } } this.InitializeUri(baseAddress, context.ListenUriRelativeAddress, context.ListenUriMode); }
internal UdpInputChannel(UdpChannelListener listener) : base(listener) { this.encoder = listener.MessageEncoderFactory.Encoder; this.messageQueue = new InputQueue <Message>(); }
public WaitQueueReader(InputQueue <T> inputQueue) { this.inputQueue = inputQueue; waitEvent = new ManualResetEvent(false); }