protected List <TMessage> EndSendMessageParallel <TMessage>(IAsyncResult ar) where TMessage : DnsMessageBase, new() { DnsClientParallelAsyncState <TMessage> state = (DnsClientParallelAsyncState <TMessage>)ar; return(state.Responses); }
protected IAsyncResult BeginSendMessageParallel <TMessage>(TMessage message, AsyncCallback requestCallback, object state) where TMessage : DnsMessageBase, new() { List <DnsClientEndpointInfo> endpointInfos = GetEndpointInfos <TMessage>(); DnsClientParallelAsyncState <TMessage> asyncResult = new DnsClientParallelAsyncState <TMessage> { UserCallback = requestCallback, AsyncState = state, Responses = new List <TMessage>(), ResponsesToReceive = endpointInfos.Count }; foreach (var endpointInfo in endpointInfos) { DnsClientParallelState <TMessage> parallelState = new DnsClientParallelState <TMessage> { ParallelMessageAsyncState = asyncResult }; lock (parallelState.Lock) { parallelState.SingleMessageAsyncResult = BeginSendMessage(message, new List <DnsClientEndpointInfo> { endpointInfo }, SendMessageFinished <TMessage>, parallelState); } } return(asyncResult); }