2012-01-20 73 views
2

當有人試圖阻止我的服務時,我的服務有一個線程可能潛在執行WinHttpSendRequest如何取消同步WinHttp請求?

WinHttpCloseHandle documentation說:

應用程序可通過關閉使用WinHttpCloseHandle

HINTERNET請求手柄但是,後來使用相同的文檔終止正在進行的同步或異步請求似乎與此相矛盾。它說:

應用程序永遠不應該WinHttpCloseHandle調用一個同步請求。這可能會造成競爭狀況。

我發現this blog post似乎同意我不能撥打WinHttpCloseHandle

我在想如何取消這個操作,以便我的服務可以優雅地停止?我真的不能等待WinHttpSendRequest自然超時,因爲它需要很長時間,我的服務不會很快停止。我認爲Windows報告這是一個錯誤,然後在關機時強制殺死該服務。

一個想法將不勝感激。

回答

0

調用WinHttpCloseHandle關閉後臺線程以強制關閉句柄可能不是最佳解決方案。它仍然有效,原來的調用者會收到類似「錯誤句柄」的錯誤代碼,並且該請求將被強制終止。

濫用這種權力可能是不安全的,而且寧願實施異步請求。但是,在關閉陳舊服務的情況下,它會正常工作。