System.IO.Pipelines - рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓реНрдкрдЬреНрдЮрд╛рдд рдЙрдкрдХрд░рдг

рдирдорд╕реНрдХрд╛рд░ рдкрд╛рдардХред .NET Core 2.1 рдХреЛ рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдП рдХрд╛рдлреА рд╕рдордп рдмреАрдд рдЪреБрдХрд╛ рд╣реИред рдФрд░ рд╕реНрдкреИрди рдФрд░ рдореЗрдореЛрд░реА рдЬреИрд╕реЗ рд╢рд╛рдВрдд рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкрдврд╝, рджреЗрдЦ рдФрд░ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, System.IO.Pipelines рдирд╛рдордХ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдорд╛рди рдзреНрдпрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдЬреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╣реИ рд╡рд╣ рдПрдХрдорд╛рддреНрд░ рдкреЛрд╕реНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдШрд░ рдкрд░ рдЕрдиреБрд╡рд╛рджрд┐рдд рдФрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдХреЛрдгреЛрдВ рд╕реЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЛ рджреЗрдЦ рд╕рдХреЗрдВред



рдкрд░рд┐рдЪрдп


рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдирд╛ рд╣реИред рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ Kestrel (ASP.NET Core рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╡реЗрдм рд╕рд░реНрд╡рд░) рдХреА рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдирдЧреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡рд┐рд╖рдп рдореЗрдВ рддрд▓реНрд▓реАрди рд╣реЛрдВ, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рддрдВрддреНрд░ рдХреА рдореЗрдореЛрд░реАрд╕реНрдЯреНрд░реАрдо рдХреЗ рдмреЗрд╣рддрд░ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓ рдореЗрдореЛрд░реАрд╕реНрдЯреНрд░реАрдо рдХреА рд╕рдорд╕реНрдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдЬреА рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрдврд╝реЗрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдкрд░ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдмрдлрд░ рдореЗрдВ рдПрдХ рдХреЙрдкреА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдЖрдВрддрд░рд┐рдХ рдХреЙрдкреА рдХреА рдПрдХ рдХреЙрдкреА рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХрд╛ рд╕рдмрд╕реЗ рддрд░реНрдХрд╕рдВрдЧрдд рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред
System.IO.Pipelines рд╕рднреА рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдВ, рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдЕрдВрджрд░ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдЪрд▓реЛ рдЖрдВрддрд░рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░рд▓ рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред System.IO.Pipelines рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдкрдврд╝рдиреЗ-рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд╡рдВрдЯрди рдХреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдХреБрдЫ рддрд░реАрдХреЗ рдЬреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЖрдХрд░реНрд╖рдХ рд╣реИрдВ, рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЦрдВрдбрди рдХрд░рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдирдП рдФрд░ рдирдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрдВрддрд░рд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднрд╛рд╖рд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рд╕рдордп-рдЕрд╡рдзрд┐, рд╕реНрдкреИрди, рдореЗрдореЛрд░реА, рдСрдмреНрдЬреЗрдХреНрдЯ рдкреВрд▓, ValueTask, рдЖрджрд┐ рдХреА рд╡реНрдпрд╛рдкрдХ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред
рдПрдХ рд╕рдордп рдореЗрдВ, рдХреБрдЫ рд▓реЛрдЧ C # рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдирд╛рдЦреБрд╢ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрдк рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдлреЗрдВрдХ рдирд╣реАрдВ рд╕рдХрддреЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╕реНрдЯреНрд░реАрдо рдиреЗ рдкрдарди / рд▓реЗрдЦрди / рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ CanRead, CanWrite рдФрд░ CanSeek рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдкрд░ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рд╛, рдЬреЛ рдПрдХ рдЫреЛрдЯреА рдмреИрд╕рд╛рдЦреА рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рдереАред рдпрд╣рд╛рдВ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рд╣реИрдВред
рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 2 рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдФрд░ рдкрд╛рдЗрдкрд░реАрдбрд░ ред рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд▓рдЧрднрдЧ 50 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдпреЗ рдЫрджреНрдо-рдкрд╣рд▓реВ рд╣реЛрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рд╕рдмрд╕реЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдЕрд╡рддрд╛рд░ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рдЗрдк рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд░реНрдЧ рдЫрд┐рдкрд╛ рд╣реИ, рдФрд░ рдХрдИ рдирд╣реАрдВ), рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕реЗ - 2 рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ, 2 рдХреЛ рдХреЗрд╡рд▓ рдЧреБрдг рдорд┐рд▓рддреЗ рд╣реИрдВ - рд░реАрдбрд░ рдФрд░ рд░рд╛рдЗрдЯрд░, рд░реАрд╕реЗрдЯ () рд╡рд┐рдзрд┐, рдЬреЛ рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЙрдирдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрдХреНрд╖рд╛ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдЫрджреНрдо-рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╛рдЗрдк рд╡рд░реНрдЧ рдкрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг 320 рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╣реИ, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ (рд▓рдЧрднрдЧ рдПрдХ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдХрд╛ рдПрдХ рддрд┐рд╣рд╛рдИ, рдРрд╕реА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ 2 рдореИрдирдЪреЗрд╕реНрдЯрд░ рдорд╛рд░реНрдХ I рдХреА рдпрд╛рдж рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХреЗ)ред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╕реНрддреБ рдХрд╛ рдЕрд░реНрде рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рднреА рдЗрд╕ рдХрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреВрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдПрдВ рд╣рдореЗрд╢рд╛ (рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рдирдХ рдореЗрдВ) рд░рд╣реЗрдВрдЧреАред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд░реНрдЧ рдХреЛ рд╕реАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ - рдХреЛрдб рдХреЗ рдХрдИ рдЕрдиреБрднрд╛рдЧ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ рд╣реИрдВ рдФрд░ рддрд╛рд▓реЗ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╛рдЗрдк рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдЗрдкрд░реАрдбрд░ рдФрд░ рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрд╕рд╛рди рдЖрд░рдВрднреАрдХрд░рдг
var pipe = new Pipe(); PipeWriter pipeWriter = pipe.Writer; PipeReader pipeReader = pipe.Reader; 


рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП - WriteAsync, GetMemory / GetSpan, Advance, FlushAsync, Complete, CancelPendingFlush, OnReaderCompletedред
рдкрд╛рдЗрдкрд░рд╛рдЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП - рдПрдбрд╡рд╛рдВрд╕рдЯреЙ, рд░реАрдбрд╛рд╕рд┐рдВрдХ, рдЯреНрд░рд╛рдЗрд░реЗрдб, рдХрдореНрдкреНрд▓реАрдЯ, рдХреИрдВрд╕рд▓рд┐рдВрдЧ, рд░реАрдбрд┐рдВрдЧ, рдСрдирдбреНрд░рд╛рдЗрдЯрд░рдХрдВрдкреНрд▓реАрдЯред

рдЬреИрд╕рд╛ рдХрд┐ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ , рд╡рд░реНрдЧ рдмрдлрд╝рд░реНрд╕ рдХреА рдПрдХ рдПрдХрд▓ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╡реЗ рдкрд╛рдЗрдкрд░реЗрдбрд░ рдФрд░ рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдХреЗ рдмреАрдЪ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рд╕рднреА рддрд░реНрдХ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд╣реИрдВред рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реМрдЯрд╛ рдбреЗрдЯрд╛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рдРрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рд╣реИрдВ рдЬреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рд╢реБрд░реБрдЖрдд (рд░реАрдбрд╣реЗрдб рдФрд░ рдЗрдВрдбреЗрдХреНрд╕), рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рдЕрдВрдд (рд░реАрдбреЗрд▓ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕) рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрдЧрд╣ рдХреА рд╢реБрд░реБрдЖрдд (рд░рд╛рдЗрдЯрд╣реЗрдб рдФрд░ рд▓рд┐рдЦрд┐рдд рдмрдлрд╝рд░ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИрдВред рдпрд╣рд╛рдВ рд░реАрдбрд╣реЗрдб, рд░реАрдбрдЯреЗрд▓ рдФрд░ рд░рд╛рдЗрдЯрд╣реЗрдб рд╕реВрдЪреА рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЦрдВрдб рд╣реИрдВ, рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдЦрдВрдб рдХреЗ рднреАрддрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдПрдХ рдЦрдВрдб рдХреЗ рдмреАрдЪ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдкреВрд░реЗ рдЕрдЧрд▓реЗ рдЦрдВрдб рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рддреАрд╕рд░реЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдпреЗ рд╕рдВрдХреЗрдд рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред

рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛


# 1 ValueTask <FlushResult> WriteAsync (ReadOnlyMemory <рдмрд╛рдЗрдЯ> рд╕реНрд░реЛрдд, рд░рджреНрджреАрдХрд░рдг рдЯрд┐рдкреНрдкрдгреА рд░рджреНрдж рдХрд░реЗрдВрдЯреЛрдХрди)


рдмрд╕ рд╡рд╣ рдореЛрд╣рдХ рд╡рд┐рдзрд┐ред рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреБрдХреНрдд рдФрд░ рдЯреНрд░реЗрдВрдбреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ - ReadOnlyMemory, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХрдИ рдХреЛ рд▓реБрднрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдХрд┐ рд╕реНрдкреИрди рдФрд░ рдореЗрдореЛрд░реА рдЗрддрдиреА рддреЗрдЬ рдФрд░ рд╢рд╛рдВрдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЪрд╛рдкрд▓реВрд╕реА рдордд рдХрд░реЛред рдпрд╣ рд╕рдм рд╡рд┐рдзрд┐ рдЬреЛ рдХрд░рддреА рд╣реИ рд╡рд╣ рдЖрдВрддрд░рд┐рдХ рд╕реВрдЪреА рдореЗрдВ рдкрдврд╝реА рдЧрдИ ReadOnlyMemory рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рд╣реИред рдФрд░ "рдХреЙрдкреА" рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреЙрдкреАрдЯреЛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рдирд╛ред рдпрд╣реА рд╣реИ, рд╕рднреА рдбреЗрдЯрд╛ рдЬрд┐рд╕реЗ рд╣рдо рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рд▓реЛрдб рд╣реЛ рд░рд╣реА рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЕрдзреНрдпрдпрди рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЦреИрд░, рдФрд░ рд╢рд╛рдпрдж рдХреБрдЫ рджреБрд░реНрд▓рдн рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдЪрд┐рдд рд╣реИред
рд╡рд┐рдзрд┐ рдХрд╛ рд╢рд░реАрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рд╣реИ, рдЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдПрдХ рдореЙрдирд┐рдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреА рдЬрд╛рддреА рд╣реИред

рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦреЗрдВ, рдЕрдЧрд░ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдХреЗрд╡рд▓ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВред

# 2 рдореЗрдореЛрд░реА <рдмрд╛рдЗрдЯ> GetMemory (int sizeHint)


рд╡рд┐рдзрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓реЗрддреА рд╣реИред рдЗрд╕рдореЗрдВ рд╣рдореЗрдВ рд╕рдВрдХреЗрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╛ рдЕрдзрд┐рдХ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдо рдирд╣реАрдВ)ред рдпрд╣ рд╡рд┐рдзрд┐ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ _writingHeadMemory рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореЗрдореЛрд░реА рдХреЗ рд╡рд░реНрддрдорд╛рди рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рд╣реИред рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ, рддреЛ _writingHeadMemory рдХреЛ рдореЗрдореЛрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдмрдлрд░ рдХреЛ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╢рдПрд╕реНрдХреНрдпреВ рд╡рд┐рдзрд┐ рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдиреНрдп рдмрдлрд╝рд░рд╕реЗрд▓реЗрдХреНрдЯ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ (рдпрд╣рд╛рдВ рд╕реВрдЪреА рд╣реИ)ред _WritingHeadMemory рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕реЗ рдПрдХ рдирдП рдмрдлрд╝рд░рд╢рд┐рдк рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд▓реЗ рдмрдлрд░ рдХрд╛ рдЖрд╡рдВрдЯрди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ рд╣реИ рдФрд░ рд▓реЙрдХ рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ (рдпрд╛ рд░рдирдЯрд╛рдЗрдо) рдиреЗ рджрд╛рдирд╡ рдХреЛ рдЖрдШрд╛рдд рдкрд╣реБрдБрдЪрд╛рдпрд╛ рд╣реИред

рджреНрд╡реЗрд╖
  var pipeNoOptions = new Pipe(); Memory<byte> memoryOne = pipeNoOptions.Writer.GetMemory(2); Console.WriteLine(memoryOne.Length); //2048  4096 var pipeWithOptions = new Pipe(new PipeOptions(minimumSegmentSize: 5)); Memory<byte> memoryTwo = pipeWithOptions.Writer.GetMemory(2); Console.WriteLine(memoryTwo.Length); //16 


рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рд╕рд░рд▓ рд╣реИред
рдПрдХ рдкрд╛рдЗрдк рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдЗрдк рдСрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдЗрдк рдСрдпрд▓реНрд╕ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреНрдпреВрдирддрдо рдЦрдВрдб рдЖрдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдпрд╣ 2048 рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдиреЗ рд╕рдм рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛, рдЕрдм 4096ред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, 4096 рд╡рд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдкреНрд░реАрд▓реЗрдпрд░реЗрдЬ рдкреИрдХреЗрдЬ рдерд╛, рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ 2048 рдерд╛ред рдпрд╣ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдорд╛рдирдХ рдмрдлрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкрд╛рдЗрдкрдСрдкреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬрд╣рд╛рдВ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рдВрдмрд╛рдИ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИред рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдмрдлрд╝рд░рд╢рд┐рдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИред рдкрд╛рдЗрдк рдСрдкреНрд╢рди рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдореЗрдореЛрд░реА рдкреВрд▓ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдирдпрд╛ рдЦрдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдореЗрдореЛрд░реА рдкреВрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ ArrayPool рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд▓реНрдЯреА рд╣реИрдВ (рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдПрдХ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реИ) рдФрд░, рдЬрдм рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рдЖрдХрд╛рд░ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд▓реНрдЯреА рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ (рддрдм рдирд┐рдХрдЯрддрдо рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ)ред рддрджрдиреБрд╕рд╛рд░, рдирдпрд╛ рдмрдлрд╝рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рдорд╛рдирдХ ArrayPool (System.Buffers.TlsOverPerCoreLockedStacksArrayPool) рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рд░рдгреА рдЖрдХрд╛рд░ 16 рд╣реИред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдкреВрд▓ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рд░рдгреА рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдкрд░ рджрдмрд╛рд╡ рдирд╣реАрдВ рдбрд╛рд▓рддреА рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

# 2.5 рд╕реНрдкреИрди <рдмрд╛рдЗрдЯ> рдЧреЗрдЯрд╕реНрдкреИрди (int sizeHint)


рдпрд╣ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реНрдкреИрди рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ GetMemory () рдпрд╛ GetSpan () рд▓реЗрдЦрди рдХреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред рд╡реЗ рд╣рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рджреЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╕реАрдзреЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреМрди рд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдПрдкреАрдЖрдИ рдФрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдорджреНрджреЗрдирдЬрд░, рдПрдХ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред рдкрд╛рдардХ рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдХрд┐рддрдирд╛ рд▓рд┐рдЦрд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ рдкреВрд▓ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдорд╛рди рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рддреЛ рдкрд╛рдардХ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреВрд░реЗ рдмрдлрд░ рдХреЛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

# 3 рд╢реВрдиреНрдп рдЕрдЧреНрд░рд┐рдо (рдЗрдВрдЯ рдмрд╛рдЗрдЯреНрд╕)


рдПрдХ рднрдпрд╛рдирдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ред рдпрд╣ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИред рд╡реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ - _unflushedBytes рдФрд░ _writingHeadBytesBuffered, рдЬрд┐рдирдХреЗ рдирд╛рдо рд╕реНрд╡рдпрдВ рдмреЛрд▓рддреЗ рд╣реИрдВред рдпрд╣ рднреА рд▓рд┐рдЦрд╛рд╡рдЯ (рд╕реНрд▓рд╛рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП _writingHeadMemory рдХреЛ рдХрд╛рдЯрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рдпрд╛ рд╕реНрдкреИрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдП рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗред рдФрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдкреВрд░рд╛ рд╢рд░реАрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рд╣реИ рдФрд░ рдПрдХ рддрд╛рд▓рд╛ рдХреЗ рдиреАрдЪреЗ рдЪрд▓рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдкрд╛рдардХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдХрджрдо рдХреА рдЬрд░реВрд░рдд рд╣реИред

# 4 рд╡реИрд▓реНрдпреВрдЯреИрд╕реНрдХ <FlushResult> FlushAsync (рдХреИрдВрд╕рд┐рд▓реЗрд╢рдирдЯреЛрдХрди рдХреИрдВрд╕рд▓реЗрд╢рдирдЯреЛрдХрди)


рдкреНрд░рд╛рдкреНрдд рдореЗрдореЛрд░реА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╡рд╣рд╛рдВ рдХрд┐рддрдирд╛ рд▓рд┐рдЦрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдПрдХ ValueTask рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ (рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ StreamPipeWriter рдХреЗ рд╡рд┐рдкрд░реАрдд)ред ValueTask рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ (рд░реАрдбрдСрдирд▓реА рд╕реНрдЯреНрд░рдХреНрдЪрд░) рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рд╕рдордп рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ рдФрд░ рд╡рд┐рдзрд┐ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рд╣реЛ рдЬрд╛рдПрдЧреАред рдЕрдВрджрд░, рдЗрд╕рдореЗрдВ рдпрд╛ рддреЛ рдбреЗрдЯрд╛ рдпрд╛ рдЯрд╛рд╕реНрдХ рд╣реЛрддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ _writerAwaitable.IsCompleted property рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕ рд╡реЗрдЯрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдЗрд╕ рд╢рд░реНрдд рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдирдкреНрд░реЛрд╕реЗрд╕реНрдб (рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ (рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЕрдкрдард┐рдд рдирд╣реАрдВ рд╣реИ (рдкрд░реАрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ), рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ (_pauseWriterThreshold)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 16 рдЦрдВрдб рдЖрдХрд╛рд░ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдорд╛рди рдХреЛ рдкрд╛рдЗрдк рдСрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдзрд┐ ReadAsync рд╡рд┐рдзрд┐ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╢реБрд░реВ рдХрд░рддреА рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЕрд╡рд░реБрджреНрдз рдерд╛ред

рдПрдХ FlushResult рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 2 рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ - IsCanceled рдФрд░ IsCompletedред IsCanceled рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлреНрд▓рд╢ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд░рджреНрдж рдХрд░реЗрдВ рд▓рдВрдмрд┐рдд рдХреЙрд▓)ред IsCompleted рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рдЗрдк-рд░рд╛рдЗрдбрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рдерд╛ (рдкреВрд░реНрдг) (рдпрд╛ рдХрдореНрдкреИрд░реЗрд╕рд┐рдВрдХреНрд╕ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ)ред
рд╡рд┐рдзрд┐ рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд▓реЛрдХреЗ рд╕реНрдХрд╛рдИрд╡реЙрдХрд░ рдХреЗ рддрд╣рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмреНрдпрд╛рдЬ рдХреЗ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

# 5 рд╢реВрдиреНрдп рдкреВрд░реНрдг (рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рдж = рдЕрд╢рдХреНрдд) рдпрд╛ рд╡реИрд▓реНрдпреВрдЯреИрд╕реНрдХ рдХрдореНрдкреНрд▓реАрдЯреИрдиреНрд╕рд┐рдВрдХ (рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рдж = рдЕрд╢рдХреНрдд)


рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХреНрд╕ рдкрд╛рдЗрдк рдмрдВрдж рд╣реЛ рдЧрдПред рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдкрд╛рдЗрдкрд░рд╛рдЗрдбрд░ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдкрд╛рдЗрдк рдХрд╛ рдкреВрд░рд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рднреА рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд╛рдо рддрд╛рд▓рд╛ рдХреЗ рдиреАрдЪреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

# 6 рд╢реВрдиреНрдп рд░рджреНрдж рдХрд░реЗрдВ рд▓рдВрдмрд┐рдд ()


рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдлреНрд▓реБрд╢рдПрдВрд╢рд╕ () рдСрдкрд░реЗрд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд▓реЛрдХ рд╣реИред

# 7 рд╢реВрдиреНрдп OnReaderCompleted (рдХреНрд░рд┐рдпрд╛ <рдЕрдкрд╡рд╛рдж, рдСрдмреНрдЬреЗрдХреНрдЯ> рдХреЙрд▓рдмреИрдХ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд┐рддрд┐)


рдкрд╛рдардХ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрд╛рд▓рд╛ рднреА рд╣реИред
рдкреНрд░рд▓реЗрдЦрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреБрдЫ рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рд╡рдВрд╢рдЬреЛрдВ рдкрд░ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рд╕реЗ рддрд░реНрдХ рдирд╣реАрдВ рдмрд╛рдБрдзрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд╛рдЗрдкрд░реАрдбрд░ рдкрд░ рдЬрд╛рдПрдВ


# 1 ValueTask <ReadResult> ReadAsync (рд░рджреНрджреАрдХрд░рдг рдЯреЛрдХрди рдЯреЛрдХрди)


рдпрд╣рд╛рдБ, рдлреНрд▓реБрд╢рд╕рд┐рдВрд╕реНрдХ рдХреА рддрд░рд╣, рдПрдХ рд╡реИрд▓реНрдпреВрд╕реИрдХрдЯ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдзрд┐рдХрддрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВред _ReaderAwaitable рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред FlushAsync рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдпрд╣ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ _readerAwaitable рдЕрдзреВрд░рд╛ рдкрд░ рд╕реЗрдЯ рд╣реИред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд╛рдЗрдкрд░реАрдбрд░ рд╕реВрдЪреА рд╕реЗ рд╕рдм рдХреБрдЫ рдкрдврд╝рддрд╛ рд╣реИ (рдпрд╛ рдЗрд╕рдореЗрдВ рд╡рд╣ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЬреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рддрд╛рд░реНрдХрд┐рдХ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЧрдП рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдареАрдХ рд╕реЗ рдЯреНрдпреВрди рдХрд░рдирд╛ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рдЗрд╕рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реЛрдЪ-рд╕рдордЭрдХрд░ рд╕реЗрдЯ рдХрд░рдирд╛ред рдЙрдЪрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╢рд╛рдЦрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд▓рдЧрднрдЧ рдкреВрд░реА рд╡рд┐рдзрд┐ рдПрдХ рддрд╛рд▓рд╛ рд╕реЗ рдШрд┐рд░реА рд╣реБрдИ рд╣реИред

рд░рд┐рдЯрд░реНрди рдХреБрдЫ рд░рд╣рд╕реНрдпрдордп ReadResult ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕рд┐рд░реНрдл рдПрдХ рдмрдлрд░ + рдЭрдВрдбреЗ рд╣реИ (рд░рджреНрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдХреНрдпрд╛ ReadAsync рдХреЛ рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХреНрдпрд╛ рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рдмрдВрдж рдерд╛)ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, IsCompleted рдПрдХ рдорд╛рди рд╣реИ рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рдХрдореНрдкреНрд▓реАрдЯ () рдпрд╛ рдХрдореНрдкреИрд░реЗрд╕рд┐рдВрдХреНрд╕ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдмрдлрд╝рд░ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдПрдХ рд░рд╣рд╕реНрдпрдордп рдкреНрд░рдХрд╛рд░ рд╣реИ - ReadOnlySequence ред рдпрд╣, рдмрджрд▓реЗ рдореЗрдВ, рд╕рдВрдмрдВрдзрд┐рдд рдЦрдВрдбреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд + рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рд╕реВрдЪрдХ рдЦрдВрдб (ReadOnlySequenceSegment) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБ рд╣реИред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрд╡рдпрдВ рдкрд╛рдЗрдк рдХреНрд▓рд╛рд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╡реИрд╕реЗ, BufferSegment ReadOnlySequenceSegment рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ, рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рд▓реЗрдЦрдХ рд╕реЗ рдкрд╛рдардХ рддрдХ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП ReadOnlySpan рдХреЛ рдмрдлрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрд╕реНрд╡реАрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдмрдлрд░ рдореЗрдВ рдПрдХрд▓ ReadOnlySpan рд╣реИред рдпрджрд┐ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддрддреНрд╡ рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдмрдлрд╝рд░ рдХреЗ рд╕рднреА рдЦрдВрдбреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ ReadOnlySpan рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЪрд░реНрдЪрд╛ рдХрд╛ рд╡рд┐рд╖рдп - ReadOnlySequence рд╡рд░реНрдЧ рдореЗрдВ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЧреЛрдЯреЛ (рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдФрд░ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ) - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ

рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкрд╛рдЗрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред

# 2 рдмреВрд▓ TryRead (рдмрд╛рд╣рд░ рдкрдврд╝реЗрдВResult рдкрд░рд┐рдгрд╛рдо)


рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдгред рдпрджрд┐ рдпрд╣ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рд╣реИ, рддреЛ ReadAsync рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИред рддрд╛рд▓реЗ рдореЗрдВ рднреАред

# 3 рд╢реВрдиреНрдп рдПрдбрд╡рд╛рдВрд╕рдЯреЙ (рдЕрдиреБрдХреНрд░рдо рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╕реЗрд╡рди, рдЕрдиреБрдХреНрд░рдо рдЬрд╛рдВрдЪ рдХреА рдЧрдИ)


рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝реЗ рдФрд░ рдХрд┐рддрдиреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдПред рдЬреЛ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реИ рдЙрд╕реЗ рдЕрдЧрд▓реА рдмрд╛рд░ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдЗрдЯ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдкрдврд╝рдиреЗ рдХреЗ рджреМрд░рд╛рди рдкрд╛рдардХ рдХреЛ рдПрдХ рдкреВрд░рд╛ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗ рдФрд░ рджреВрд╕рд░рд╛ рднрд╛рдЧред рдкреВрд░реЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрдЧрд▓реА рдмрд╛рд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рд╢реЗрд╖ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рдЖрдПред AdvanceTo рдкрджреНрдзрддрд┐ рдПрдХ SequencePosition рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдореЗрдВ рдПрдХ рдЦрдВрдб + рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред ReadAsync рдиреЗ рдЬреЛ рдХреБрдЫ рднреА рдкрдврд╝рд╛ рд╣реИ, рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдмрдлрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдиреА рд╣реЛрдЧреА, рдЬреЛ рдЙрд╕ рдЦрдВрдб рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣реБрдб рдХреЗ рддрд╣рддред
рд╕рд╛рде рд╣реА, рдпрджрд┐ рдХрдЪреНрдЪреА рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рджреЛрд╖ (_resumeWriterThreshold) рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдпрд╣ рдЕрд╡рд░реБрджреНрдз рд╣реЛрдиреЗ рдкрд░ рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рджрд╣рд▓реАрдЬ 8 рдЦрдВрдб рдЦрдВрдб (рдЖрдзрд╛ рдЕрд╡рд░реБрджреНрдз рджрд╣рд▓реАрдЬ) рд╣реИред

# 4 рд╢реВрдиреНрдп рдкреВрд░реНрдг (рдЕрдкрд╡рд╛рдж рдЕрдкрд╡рд╛рдж = рдЕрд╢рдХреНрдд)


рдкрд╛рдЗрдкрд░реЗрдбрд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╛рдЗрдкрд╡рд┐рдЯрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕рдВрдкреВрд░реНрдг рдкрд╛рдЗрдк рдЖрд╡реГрддреНрддрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЕрдВрджрд░ рд╕реЗ рддрд╛рд▓рд╛ред

# 5 рд╢реВрдиреНрдп рд░рджреНрдж рдХрд░реЗрдВ рд▓рдВрдмрд┐рдд ()


рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрдврд╝рдиреЗ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Locред

# 6 рд╢реВрдиреНрдп OnWriterCompleted (рдХреНрд░рд┐рдпрд╛ <рдЕрдкрд╡рд╛рдж, рдСрдмреНрдЬреЗрдХреНрдЯ> рдХреЙрд▓рдмреИрдХ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд┐рддрд┐)


рдЖрдкрдХреЛ рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкрд╛рдЗрдкрд╡рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рд╣реА рдиреЛрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рддрд╛рд▓рд╛ред

рдЙрджрд╛рд╣рд░рдг



рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реВрдЪреА рдкрд╛рдЗрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддреА рд╣реИред
.NET рдХреЛрд░ рд╕реНрдкреИрди рдФрд░ рдореЗрдореЛрд░реА рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рд╕реЗ, рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдУрд╡рд░рд▓реЛрдб рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреЛ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реНрдХреАрдо рд▓рдЧрднрдЧ рдПрдХ рд╣реА рд╣реЛрдЧреАред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдореБрдЭреЗ рдореВрд▓ рд╢рдмреНрдж рдкрд╕рдВрдж рд╣реИрдВ), рдЕрд░реНрдерд╛рддред рдЪреИрдирд▓ - рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдУрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯред рдЪреИрдирд▓ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗрд╡рд▓ рд╕реНрдкреИрди рдФрд░ рдореЗрдореЛрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдПрдХ рдСрдЯреЛ-рдЬреЗрдирд░реЗрдЯ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рд╕реНрдкреИрди рд░реЗрдлреЙрдирд▓реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдпрд╣ рдХреНрд░рдорд╢рдГ, рд╕реНрдкреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдвреЗрд░ рдкрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдкреИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╕реНрдХрд░рдг рдЦреБрдж рдХреЛ рдмреЗрд╣рддрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдХрдо рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рддреЗрдЬ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдерд╛ред рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдЧрд▓реЗ рдмреИрдЪ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЖрдкрдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмреЗрдХрд╛рд░ рди рд╣реЛред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреА рд╣реИрдВред рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд╛рдЗрдк рд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛ рдЙрд╕ рдЬрдЧрд╣ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡реЗ рдкрд╛рдЗрдк рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд░реНрд╖ - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЗрди
  class Program { static async Task Main(string args) { var pipe = new Pipe(); var dataWriter = new PipeDataWriter(pipe.Writer, "testpipe"); var dataProcessor = new DataProcessor(new ConsoleBytesProcessor(), pipe.Reader); var cts = new CancellationTokenSource(); await Task.WhenAll(dataWriter.ReadFromPipeAsync(cts.Token), dataProcessor.StartProcessingDataAsync(cts.Token)); } } 


PipeDataWriter
  public class PipeDataWriter { private readonly NamedPipeClientStream _namedPipe; private readonly PipeWriter _pipeWriter; private const string Servername = "."; public PipeDataWriter(PipeWriter pipeWriter, string pipeName) { _pipeWriter = pipeWriter ?? throw new ArgumentNullException(nameof(pipeWriter)); _namedPipe = new NamedPipeClientStream(Servername, pipeName, PipeDirection.In); } public async Task ReadFromPipeAsync(CancellationToken token) { await _namedPipe.ConnectAsync(token); while (true) { token.ThrowIfCancellationRequested(); ////       Memory<T> //Memory<byte> buffer = _pipeWriter.GetMemory(); ////       Memory<T> ////         -       . //int readBytes = await _namedPipe.ReadAsync(buffer, token); //         PipeWriter Span //         -       . int readBytes = _namedPipe.Read(_pipeWriter.GetSpan()); //      ,        //         if (readBytes == 0) { await Task.Delay(500, token); continue; } // ,       _pipeWriter.Advance(readBytes); //  ,      PipeReader FlushResult result = await _pipeWriter.FlushAsync(token); //  PipeReader  ,       //        ,      if (result.IsCompleted) { break; } } //  _pipeWriter     Pipe _pipeWriter.Complete(); } } 


DataProcessor
  public class DataProcessor { private readonly IBytesProcessor _bytesProcessor; private readonly PipeReader _pipeReader; public DataProcessor(IBytesProcessor bytesProcessor, PipeReader pipeReader) { _bytesProcessor = bytesProcessor ?? throw new ArgumentNullException(nameof(bytesProcessor)); _pipeReader = pipeReader ?? throw new ArgumentNullException(nameof(pipeReader)); } public async Task StartProcessingDataAsync(CancellationToken token) { while (true) { token.ThrowIfCancellationRequested(); //     Pipe ReadResult result = await _pipeReader.ReadAsync(token); ReadOnlySequence<byte> buffer = result.Buffer; //      await _bytesProcessor.ProcessBytesAsync(buffer, token); // ,      .       ,   //  ,               //    IBytesProcessor.ProcessBytesAsync   ,    _pipeReader.AdvanceTo(buffer.End); //  PipeWriter  ,      //      ,      if (result.IsCompleted) { break; } } //  _pipeReader     Pipe _pipeReader.Complete(); } } 


BytesProcessor
  public interface IBytesProcessor { Task ProcessBytesAsync(ReadOnlySequence<byte> bytesSequence, CancellationToken token); } public class ConsoleBytesProcessor : IBytesProcessor { //,         IDisposable readonly FileStream _fileStream = new FileStream("buffer", FileMode.Create); public Task ProcessBytesAsync(ReadOnlySequence<byte> bytesSequence, CancellationToken token) { if (bytesSequence.IsSingleSegment) { ProcessSingle(bytesSequence.First.Span); } else { foreach (var segment in bytesSequence) { ProcessSingle(segment.Span); } } return Task.CompletedTask; } private void ProcessSingle(ReadOnlySpan<byte> span) { _fileStream.Write(span); } } 

Source: https://habr.com/ru/post/hi464921/


All Articles