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