public void Dispose() { Log("Dispose before lock"); lock (locker) { Log("Dispose in lock"); var t = new ThreadInfo(); if (t.Id != thread.Id) { Log("Thread mismatch d:{0} != c:{1}", t, thread); } //AssertTools.True(t.Id == thread.Id, "Thread mismatch d:{0} != c:{1}", t, thread); if (!disposed) { Log("Disposing..."); ExceptionTools.Try(() => Dispose(disposed), HandleException); Log("Dispose OK"); Counter.Minus(this); disposed = true; var found = undisposed.Remove(this); AssertTools.True(found, "Disposable not found in undisposed"); Log("Disposed"); } } }
public void Dispose() { while (actions.Count > 0) { ExceptionTools.Try(actions.Pop(), handler); } }
private void Loop() { //provide a non throwing handler to avoid using try here while (!quit) { ExceptionTools.Try(Process); } }
public static TcpClient ConnectWithTimeout(string ip, int port, int timeout) { var client = new TcpClient(); var result = client.BeginConnect(ip, port, null, null); if (!result.AsyncWaitHandle.WaitOne(timeout, true)) { ExceptionTools.Try(client.Close); throw ExceptionTools.Make("Timeout connecting to {0}:{1}", ip, port); } client.EndConnect(result); return(client); }
public static SslStream SslWithTimeout(TcpClient client, int timeout) { var endpoint = client.Client.RemoteEndPoint; var stream = new SslStream(client.GetStream(), false, AcceptAnyCertificate); var result = stream.BeginAuthenticateAsClient(string.Empty, null, null); if (!result.AsyncWaitHandle.WaitOne(timeout, true)) { ExceptionTools.Try(stream.Dispose); ExceptionTools.Try(client.Close); throw ExceptionTools.Make("Timeout authenticating to {0}", endpoint); } return(stream); }
protected override void Dispose(bool disposed) { ExceptionTools.Try(() => { process.StandardInput.Close(); var to = wait > 0 ? wait : 5000; Logger.Trace("WaitForExit {0} {1}ms...", id, to); var start = DateTime.Now; var exited = process.WaitForExit(to); var elapsed = DateTime.Now - start; Logger.Trace("WaitForExit {0} {1:0}ms {2}", id, elapsed.TotalMilliseconds, exited); }); ExceptionTools.Try(process.Kill); ExceptionTools.Try(process.Dispose); }