gpt4 book ai didi

c# - .NET 中是否有一些流 "pipe"类?

转载 作者:行者123 更新时间:2023-11-30 12:55:44 24 4
gpt4 key购买 nike

我为 C# 编写了一个 FastCGI 库。这是在异步/等待之前。现在我正在编写这个库的第 2 版,并考虑到性能。因此,我通过使用 socket.ReceiveAsync 来使用 IOCP。 (注:ReceiveAsyncawait/async无关,我想用ReceiveAsync。)

但是,图书馆的用户可以通过不指定 Content-Length-header 来回答传入的请求。这会导致库需要收集所有传出流量,直到所有数据可用或用户指定 Content-Length。

我的这个库的旧版本通过一个自己编写的类 LocalPipe 实现了这一点。 LocalPipe 只是一个 Stream,您可以在其中写入数据,然后从中读取数据。如果没有足够的可用数据,则读取方法会阻塞。

LocalPipe 阻塞时,调用线程也在阻塞,因此在等待新数据时不会被释放。这导致了“一个连接/一个线程”的设计,至少在等待来自 LocalPipe 的数据时是这样。

我的问题是:是否已经有一个类(作为 NuGet 包或在 .NET 框架本身中)实现了类似于我的 LocalPipe 类的东西,但它会“阻塞”而不保留调用线程正在使用中?

不是在寻找常规的Task-await 模式,除非它真的可以避免使用不必要的线程/任务和上下文切换。目前实现此类“线程消耗友好”的唯一方法似乎是大量使用 ExecutionContext 和/或 SynchronizationContext 我自己实现一个等待模式。如果我能避开这个就好了。

最佳答案

是的,同时还有:

System.IO.Pipelines

关于c# - .NET 中是否有一些流 "pipe"类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com