public QuicStreamContext(QuicConnectionContext connection, QuicTransportContext context) { _connection = connection; _context = context; _log = context.Log; MemoryPool = connection.MemoryPool; MultiplexedConnectionFeatures = connection.Features; RemoteEndPoint = connection.RemoteEndPoint; LocalEndPoint = connection.LocalEndPoint; var maxReadBufferSize = context.Options.MaxReadBufferSize ?? 0; var maxWriteBufferSize = context.Options.MaxWriteBufferSize ?? 0; // TODO should we allow these PipeScheduler to be configurable here? var inputOptions = new PipeOptions(MemoryPool, PipeScheduler.ThreadPool, PipeScheduler.Inline, maxReadBufferSize, maxReadBufferSize / 2, useSynchronizationContext: false); var outputOptions = new PipeOptions(MemoryPool, PipeScheduler.Inline, PipeScheduler.ThreadPool, maxWriteBufferSize, maxWriteBufferSize / 2, useSynchronizationContext: false); _inputPipe = new Pipe(inputOptions); _outputPipe = new Pipe(outputOptions); _transportPipeReader = new CompletionPipeReader(_inputPipe.Reader); _transportPipeWriter = new CompletionPipeWriter(_outputPipe.Writer); _originalApplication = new DuplexPipe(_outputPipe.Reader, _inputPipe.Writer); _originalTransport = new DuplexPipe(_transportPipeReader, _transportPipeWriter); }