public TimeoutStream(Stream innerStream, TimeSpan timeout, Tracer tracer) { _innerStream = innerStream; _timeout = timeout; _tracer = tracer; _timer = new Timer(_timeout.TotalMilliseconds) { AutoReset = false }; _timer.Elapsed += (sender, args) => { tracer.AsInfo("Timeout of {0} reached.".FormatWith(_timeout)); Close(); }; _timer.Start(); }