public StreamPump(Stream inputStream, Stream outputStream, StreamPumpCallback callback, int bufferSize) { buffer = new byte[bufferSize]; Input = inputStream; Output = outputStream; this.callback = callback; Pump(); }
public StreamPump(Stream inputStream, Stream outputStream, StreamPumpCallback callback, int bufferSize) { buffer = new byte[bufferSize]; Input = inputStream; Output = outputStream; this.callback = callback; Pump(); }
private void Finish(StreamPumpResult result, StreamPumpCallback callback) { callback?.BeginInvoke(this, result, callback.EndInvoke, null); try { sem.Release(); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { LogManager.GetLogger(typeof(StreamPump)).Error(ex.Message, ex); } }
public void Pump(StreamPumpCallback callback) { try { Input.BeginRead(buffer, 0, buffer.Length, readResult => { try { var read = Input.EndRead(readResult); if (read <= 0) { Finish(StreamPumpResult.Delivered, callback); return; } try { Output.BeginWrite(buffer, 0, read, writeResult => { try { Output.EndWrite(writeResult); Pump(callback); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }, null); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }, null); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }
private void Finish(StreamPumpResult result, StreamPumpCallback callback) { if (callback != null) { callback.BeginInvoke(this, result, ir => { callback.EndInvoke(ir); }, null); } try { sem.Release(); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { LogManager.GetLogger(typeof(StreamPump)).Error(ex.Message, ex); } }
private void Finish(StreamPumpResult result, StreamPumpCallback callback) { //https://stackoverflow.com/a/55516918/74071 var task = Task.Run(() => callback(this, result)); task.Wait(); try { sem.Release(); } catch (ObjectDisposedException) { // ignore } catch (Exception ex) { Trace.WriteLine($"StreamPump.Finish Ex [{ ex.Message }]"); } }
public void Pump(StreamPumpCallback callback) { try { Input.BeginRead(buffer, 0, buffer.Length, readResult => { try { var read = Input.EndRead(readResult); if (read <= 0) { Finish(StreamPumpResult.Delivered, callback); return; } try { Output.BeginWrite(buffer, 0, read, writeResult => { try { Output.EndWrite(writeResult); Pump(callback); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }, null); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }, null); } catch (Exception) { Finish(StreamPumpResult.Aborted, callback); } }