public static bool Connect(Socket socket, IPAddress[] addresses, int port, int timeout) { using (var waitAsyncResult = new WaitAsyncResult((w, r) => { var s = (Socket)r.AsyncState; var succeed = false; try { s.EndConnect(r); succeed = !w.TimedOut; } catch (SystemException sex) { if (g_traceInfo.IsWarningEnabled) { TraceHelper.TraceWarning(g_traceInfo, sex.Message); } } if (!succeed) { s.Close(); } return(succeed); })) { socket.BeginConnect(addresses, port, waitAsyncResult.Callback, socket); return(waitAsyncResult.Wait(timeout)); } }
public static IPAddress[] GetHostAddresses(string hostNameOrAddress, int timeout) { IPAddress[] addresses = null; using (var waitAsyncResult = new WaitAsyncResult((w, r) => { try { addresses = Dns.EndGetHostAddresses(r); return(true); } catch (SystemException sex) { if (g_traceInfo.IsWarningEnabled) { TraceHelper.TraceWarning(g_traceInfo, sex.Message); } return(false); } })) { Dns.BeginGetHostAddresses(hostNameOrAddress, waitAsyncResult.Callback, null); waitAsyncResult.Wait(timeout); return(addresses); } }
public IAsyncResult BeginWait(TimeSpan timeout, bool throwTimeoutException, AsyncCallback callback, object state) { Exception exception = null; lock (this.thisLock) { if (!this.set) { WaitAsyncResult result = new WaitAsyncResult(timeout, throwTimeoutException, callback, state); this.Aborted += new WaitAsyncResult.AbortHandler(result.OnAborted); this.Faulted += new WaitAsyncResult.AbortHandler(result.OnFaulted); this.Signaled += new WaitAsyncResult.SignaledHandler(result.OnSignaled); result.Begin(); return result; } if (this.communicationObject != null) { exception = this.GetException(); } } if (exception != null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception); } return new CompletedAsyncResult(callback, state); }
public static void Wait_Completed(bool callbackSucceed) { // Arrange var waitAsyncResult = new WaitAsyncResult((w, r) => callbackSucceed); // Act waitAsyncResult.Callback(null); var result = waitAsyncResult.Wait(0); // Assert Assert.Equal(callbackSucceed, result); Assert.False(waitAsyncResult.TimedOut); Assert.Equal(callbackSucceed, waitAsyncResult.Succeed); }
public IAsyncResult BeginClose(TimeSpan timeout, AsyncCallback callback, object state) { bool flag = false; WaitAsyncResult result = null; lock (this.thisLock) { if (this.closed || (this.currentCount == 0)) { flag = true; } else { result = new WaitAsyncResult(timeout, true, callback, state); this.Signaled += new WaitAsyncResult.SignaledHandler(result.OnSignaled); } this.closed = true; } if (flag) { return new CompletedAsyncResult(callback, state); } result.Begin(); return result; }