static void BeginRead(this Stream s, Byte[] buffer, OnReadFunc onRead, OnCompleteFunc onComplete, Func <bool> IsDisposed) { if (IsDisposed()) { return; } AsyncCallback callback = ar => { var ss = ar.AsyncState as Stream; var readCount = ss.EndRead(ar); if (readCount == 0) { if (onComplete != null) { onComplete(); } return; } onRead(buffer, readCount); BeginRead(ss, buffer, onRead, onComplete, IsDisposed); }; s.BeginRead(buffer, 0, buffer.Length, callback, s); }
public static IDisposable BeginRead(this Stream s, Byte[] buffer, OnReadFunc onRead, OnCompleteFunc onComplete = null) { var disposable = new Disposable(); s.BeginRead(buffer, onRead, onComplete, () => disposable.IsDisposed); return(disposable); }