2015-09-25 53 views
0

我有以下簡單的代碼來處理我的應用程序中的一個HTTP請求。這段代碼可以工作,但是,每當我嘗試結束應用程序並調用close函數時,我都會得到一個異常和堆棧跟蹤,表明在EndGetContext函數中發生了這種情況。我怎樣才能避免這種情況?阻止這種情況的正確方法是什麼?我當然可以在waitforrequest函數中捕獲異常,然後將它推到地毯下,但是,恕我直言,這不是停止某些事情的好方法。作爲例外,在EndGetContext功能發生,沒有什麼我可以做的事後檢查,如果聽者停止,或者設置一個信號...EndGetContext中關閉偵聽器時發生HttpListener異常

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 
+0

所以你的問題不是如何處理異常,但如何關閉一個聽衆乾淨? – usr

+0

正確...恕我直言,如果我以「正常」的方式停止某件事情,它不應該引發異常,因爲停止和啓動並不是真正的「例外」,它應該是一個正常和常見的功能。當然異步仍然會返回,但是我應該能夠檢查返回的上下文以查看它是否有效,然後乾淨地退出。 –

回答

0

我有同樣的問題,我這個解決它:

m_HttpServer.Stop(); 
m_HttpServer.Close(); 
相關問題