【发布时间】:2015-12-23 09:08:06
【问题描述】:
我有以下简单的代码来处理我的应用程序中的一个 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
【问题讨论】:
-
所以你的问题不是如何处理异常,而是如何干净地关闭监听器?
-
正确...恕我直言,如果我以“正常”方式停止某些事情,它不应该引发异常,因为停止和启动并不是真正的“异常”,它应该是正常和常见的功能。当然,异步仍然会返回,但是我应该能够检查返回的上下文以查看它是否有效,然后干净地退出。
标签: c# asynchronous httplistener