关闭监听器时在EndGetContext中出现HttpListener异常

本文关键字:HttpListener 异常 EndGetContext 监听器 | 更新日期: 2023-09-27 18:14:29

我有以下简单的代码来处理我的应用程序中的一个HTTP请求。这段代码可以工作,但是,每当我试图结束应用程序并且调用close函数时,我都会得到一个异常和堆栈跟踪,表明这是在EndGetContext函数中发生的。我怎样才能避免这种情况,什么是阻止这种情况发生的正确方法?当然,我可以在waitforrequest函数中捕获异常,然后将其推到地毯下,但是,恕我直言,这不是停止某事的好方法。由于异常发生在EndGetContext函数中,因此之后我无法检查侦听器是否停止或设置信号…

internal void Run()
{
  m_HttpServer.Prefixes.Add(m_Config.PublicAccessSvcHttpPrefix); 
  m_HttpServer.Start();
  WaitForRequest();
}
private async void WaitForRequest()
{
  HttpListenerContext context = await m_HttpServer.GetContextAsync();
  HandleRequest(context);
  WaitForRequest();
}
internal void HandleRequest(...){...}
internal void Stop()
{
  m_HttpServer.Close();
}
//Handle request function will proccess the incoming request and do som things

关闭监听器时在EndGetContext中出现HttpListener异常

我也有同样的问题,我是这样解决的:

m_HttpServer.Stop(); 
m_HttpServer.Close();