public static IObservable <ReadOnlyMemory <byte> > CreateObservable(this PipeFactory pfac, IPipeReader reader) { return(Observable.Create <ReadOnlyMemory <byte> >(async(ob, ct) => { try { while (true) { ct.ThrowIfCancellationRequested(); var result = await reader.ReadAsync(); if (result.IsCancelled || (result.IsCompleted && result.Buffer.IsEmpty)) { break; } foreach (var rbuf in result.Buffer) { ob.OnNext(rbuf); } reader.Advance(result.Buffer.End); } ob.OnCompleted(); } catch (Exception e) { try { reader.CancelPendingRead(); } catch { } ob.OnError(e); } })); }
public void StopWriteToSocket() { PipeReader.CancelPendingRead(); // unblock Writable (may race with CompleteWritable) Action continuation = Interlocked.Exchange(ref _writableCompletion, _stopSentinel); continuation?.Invoke(); }
public void Abort(Exception ex) { lock (_writeLock) { if (_completed) { return; } _completed = true; _outputReader.CancelPendingRead(); _outputWriter.Complete(ex); } }
public void Abort(Exception error) { lock (_contextLock) { if (_completed) { return; } _log.ConnectionDisconnect(_connectionId); _completed = true; _outputPipeReader.CancelPendingRead(); _pipeWriter.Complete(error); } }