/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Shared/ServerInfrastructure/DuplexPipe.cs
54 строки
2 KB
Andrew Casey
Add an explanatory comment to DuplexPipe (#56863)
18 июл 2024, 22:17
Не верифицирован
18 июл 2024, 22:17
662d200
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.IO.Pipelines; /// <remarks> /// A <see cref="Pipe"/> is a reader-writer pair, where content written to the writer can be read from the reader. /// /// An <see cref="IDuplexPipe"/> is *not* a pipe. It is also a reader-writer pair, but the reader and writer are not /// connected. Rather, it can be regarded as *one end* of a two-way (i.e. duplex) communication channel, where content /// written to the writer is sent to the counterparty and content received from the counterparty is readable from the /// reader. /// /// A <see cref="DuplexPipePair"/> is a pair of <see cref="IDuplexPipe"/> instances, each of which represents one end of /// a two-way communication channel. (In a sense, this makes it a "duplex pipe".) It can also be viewed as a pair of /// <see cref="Pipe"/>s, as these underlie the <see cref="IDuplexPipe"/> instances. In either view, it is composed of /// two <see cref="PipeReader"/>s and two <see cref="PipeWriter"/>s - it is only how they are grouped that differs. /// </remarks> internal sealed class DuplexPipe : IDuplexPipe { public DuplexPipe(PipeReader reader, PipeWriter writer) { Input = reader; Output = writer; } public PipeReader Input { get; } public PipeWriter Output { get; } public static DuplexPipePair CreateConnectionPair(PipeOptions inputOptions, PipeOptions outputOptions) { var input = new Pipe(inputOptions); var output = new Pipe(outputOptions); var transportToApplication = new DuplexPipe(output.Reader, input.Writer); var applicationToTransport = new DuplexPipe(input.Reader, output.Writer); return new DuplexPipePair(applicationToTransport, transportToApplication); } // This class exists to work around issues with value tuple on .NET Framework public readonly struct DuplexPipePair { public IDuplexPipe Transport { get; } public IDuplexPipe Application { get; } public DuplexPipePair(IDuplexPipe transport, IDuplexPipe application) { Transport = transport; Application = application; } } }