internal void EndFactoryClose(IAsyncResult result) { if (typeof(CompletedAsyncResult).IsAssignableFrom(result.GetType())) { CompletedAsyncResult.End(result); } else { ChannelFactory.EndClose(result); } }
private void SendMessages(TimeSpan channelTimeout, TimeSpan messageSendTimeout) { ChannelFactory<IOutputChannel> channelFactory = new ChannelFactory<IOutputChannel>(Util.GetBinding(), Queue); IOutputChannel proxy = channelFactory.CreateChannel(); IAsyncResult[] resultArray = new IAsyncResult[MessageCount]; for (int i = 0; i < MessageCount; i++) { Message toSend = Message.CreateMessage(MessageVersion.Default, string.Empty, i); resultArray[i] = proxy.BeginSend(toSend, messageSendTimeout, null, null); } for (int j = 0; j < MessageCount; j++) { proxy.EndSend(resultArray[j]); } IAsyncResult iocCloseResult = proxy.BeginClose(channelTimeout, null, null); Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work proxy.EndClose(iocCloseResult); IAsyncResult chanFactCloseResult = channelFactory.BeginClose(channelTimeout, null, null); Thread.Sleep(TimeSpan.FromMilliseconds(50.0)); // Dummy work channelFactory.EndClose(chanFactCloseResult); }