我实现了HttpListener来处理请求。
现在我不确定使用异步实现比我的更好。
我做了类似的事情:
while (this.httpListener.IsListening)
{
processRequest(this.httpListener.GetContext());
}
void processRequest(HttpListenerContext context)
{
...
ThreadPool.QueueUserWorkItem(....
...
}
简而言之,我首先在一个线程中处理所有请求,然后使用ThreadPool将它们拆分。
与Async-Implementation相比是否存在任何缺陷,还是甚至更糟?
答案 0 :(得分:1)
要意识到的一件重要事情是使用async
不会创建新线程。当然,您正在调用的函数可能会这样做,但仅async
没有。
对于IO,许多Microsoft实现的Async方法在某些时候使用IO完成端口。这意味着它们会从操作系统管理的单个专用线程中回调,而不是只是为了等待某个IO而创建一个新线程。
这是一种更好的方法,特别是对于可能有大量传入请求的服务器。每个线程都有巨大的开销。
因此,我建议您尽可能使用async
实施。