关闭监听器

时间:2015-09-25 13:53:13

标签: c# asynchronous httplistener

我有以下简单的代码来处理我的应用程序中的一个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

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我解决了这个问题:

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