C# 异步与手动线程创建HttpListener

C# 异步与手动线程创建HttpListener,c#,multithreading,C#,Multithreading,我实现了HttpListener来处理请求 现在我不确定使用异步实现是否比我的更好 我的做法与此类似: while (this.httpListener.IsListening) { processRequest(this.httpListener.GetContext()); } void processRequest(HttpListenerContext context) { ... ThreadPool.QueueUserWorkItem(.... ..

我实现了HttpListener来处理请求

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

我的做法与此类似:

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

void processRequest(HttpListenerContext context)
{
    ...
    ThreadPool.QueueUserWorkItem(....
    ...
}
简而言之,我首先在一个线程中处理所有请求,然后使用线程池将它们拆分


与异步实现相比,它有什么缺点吗?甚至有什么缺点吗?

需要意识到的一点是,使用
Async
不会创建新线程。当然,您正在调用的函数可能会这样做,但单是
async
就不行

对于IO,许多异步方法的Microsoft实现在某些时候使用IO完成端口。这意味着他们从操作系统管理的一个专用线程中被调用,而不必创建一个新线程来等待一些IO

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


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

如果您在第一次
中不做一些耗时的事情,这似乎很好。
所做的就是为超时相关的内容创建一些HandleContainer。这种方法适用于小规模服务,我不知道您定义了多少,但是我想假设16不是。实现异步方式并使用processRequest是否不好?我不太确定你的意思。。。不过,让processRequest()使用异步方法也可以。