我为C#编写了FastCGI库。这是在异步/等待时间之前。现在,我正在考虑性能的情况下对该库的版本2进行编程。因此,我通过使用socket.ReceiveAsync使用IOCP。 (注意:ReceiveAsyncawait / async无关。我想使用ReceiveAsync。)

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

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

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

我的问题是:是否已经有一个类(如NuGet包或.NET框架本身)实现了类似于我的LocalPipe类的类,但将在不保持调用线程使用的情况下“阻塞”?

我不是在寻找Task的常规await模式,除非它确实避免了不必要的Thread s / Task s和上下文切换的使用。当前,实现此类“线程消耗友好”类的唯一方法似乎是在我自己实现等待模式的同时大量​​使用ExecutionContext和/或SynchronizationContext。如果我能回避这个问题,那就太好了。

最佳答案

是的,同时有:

System.IO.Pipelines

08-05 03:30