我喜欢编写一个打开许多套接字和文件的应用程序。把它想象成网络服务器(在我的情况下这不是真的,但为了简化这里的问题)。
如果我在 Unix 上用 C 语言编写它,我会使用 poll/select 并且非常高效,因为我没有多个线程,所以一切都很容易编写,同时非常高效。
如果我使用多个线程来使用 CPU 的所有内核(鉴于我不想使用进程),我将使用 Unix FIFO 来传输消息并在每个线程上使用仍然轮询/选择(与文件/套接字/fifos 完美配合) /)。事情仍然非常简单,同时非常高效。
但是在使用 C# 时,似乎有不同的选择,并且大多数类根本不支持这种编程风格(HttpWebListener 只是一个例子)。我不喜欢这种BeginInvoke
混乱,因为在后台发生了一些我无法控制的事情(线程池,优雅地关闭阻塞服务器,......)。
我想知道 C# 是否有任何类似的选择/轮询框架?