我正在编写一个HTTP服务器。虽然有很多类似的服务器,但这个是我的。它包含以下代码:
private async void Listen(object state)
{
while (webListener.IsListening)
{
HttpListenerContext context = await webListener.GetContextAsync();
Task.Factory.StartNew(() => ProcessRequest(context));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}
}
代码似乎非常好用。它感觉快速,反应灵敏,不会泄露资源等等。但是,我在Visual Studio中下划线的那一行代码会给出一个警告:
因为这个调用没有被等待,所以当前方法的执行会在调用完成之前继续。请考虑对调用结果应用“await”运算符。
显然,如果我在
Task.Factory.Startnew()
前面添加 await
,警告就会消失……但在这种情况下真的有意义吗?我希望 ProcessRequest
是一个“启动并忘记”的操作,我不关心任何返回值,我只想尽快回到监听新请求的状态。我应该忽略警告,还是我漏掉了什么?
async/await
模型也可以应用于基于HttpListener
的服务器。 - noseratio - open to work