Async与手动Threadcreation HttpListener

时间:2013-04-15 08:07:38

标签: c# multithreading

我实现了HttpListener来处理请求。

现在我不确定使用异步实现比我的更好。

我做了类似的事情:

while (this.httpListener.IsListening)
{
    processRequest(this.httpListener.GetContext());
}

void processRequest(HttpListenerContext context)
{
    ...
    ThreadPool.QueueUserWorkItem(....
    ...
}

简而言之,我首先在一个线程中处理所有请求,然后使用ThreadPool将它们拆分。

与Async-Implementation相比是否存在任何缺陷,还是甚至更糟?

1 个答案:

答案 0 :(得分:1)

要意识到的一件重要事情是使用async不会创建新线程。当然,您正在调用的函数可能会这样做,但仅async没有。

对于IO,许多Microsoft实现的Async方法在某些时候使用IO完成端口。这意味着它们会从操作系统管理的单个专用线程中回调,而不是只是为了等待某个IO而创建一个新线程。

这是一种更好的方法,特别是对于可能有大量传入请求的服务器。每个线程都有巨大的开销。

因此,我建议您尽可能使用async实施。