protected IAsyncResult BeginSendHelper(IPeerNeighbor neighbor, TimeSpan timeout, Message message, FloodAsyncResult fresult) { IAsyncResult result = null; IAsyncResult result2; bool flag = false; try { UtilityExtension.OnMessageSent(neighbor); result = neighbor.BeginSend(message, timeout, Fx.ThunkCallback(new AsyncCallback(fresult.OnSendComplete)), message); fresult.AddResult(result, neighbor); if (result.CompletedSynchronously) { neighbor.EndSend(result); UtilityExtension.OnEndSend(neighbor, fresult); } result2 = result; } catch (Exception exception) { if (Fx.IsFatal(exception)) { flag = true; throw; } if (PeerFlooderBase <TFloodContract, TLinkContract> .CloseNeighborIfKnownException(this.neighborManager, exception, neighbor) != null) { fresult.MarkEnd(false); throw; } System.ServiceModel.DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Information); result2 = null; } finally { if (((result == null) || result.CompletedSynchronously) && !flag) { message.Close(); } } return(result2); }
protected IAsyncResult BeginSendHelper(IPeerNeighbor neighbor, TimeSpan timeout, Message message, FloodAsyncResult fresult) { IAsyncResult result = null; bool fatal = false; try { UtilityExtension.OnMessageSent(neighbor); result = neighbor.BeginSend(message, timeout, Fx.ThunkCallback(new AsyncCallback(fresult.OnSendComplete)), message); fresult.AddResult(result, neighbor); if (result.CompletedSynchronously) { neighbor.EndSend(result); UtilityExtension.OnEndSend(neighbor, fresult); } return(result); } catch (Exception e) { if (Fx.IsFatal(e)) { fatal = true; throw; } if (null != CloseNeighborIfKnownException(neighborManager, e, neighbor)) { fresult.MarkEnd(false); throw; } DiagnosticUtility.TraceHandledException(e, TraceEventType.Information); return(null); } finally { if ((result == null || result.CompletedSynchronously) && !fatal) { message.Close(); } } }