如何取消同步WinHttp请求?

时间:2012-01-20 09:37:06

标签: winapi winhttp

当有人试图停止我的服务时,我的服务有一个可能正在执行WinHttpSendRequest的线程。

WinHttpCloseHandle documentation说:

  

应用程序可以使用HINTERNET

关闭WinHttpCloseHandle请求句柄来终止正在进行的同步或异步请求

但是,后来相同的文档似乎与此相矛盾。它说:

  

应用程序永远不应WinHttpCloseHandle调用同步请求。这可能会造成竞争条件。

我发现this blog post似乎同意我无法致电WinHttpCloseHandle

我想知道如何取消此操作以便我的服务可以优雅地停止?我真的不能等待WinHttpSendRequest自然超时,因为它需要太长时间而且我的服务不能足够快地停止。我认为Windows将此报告为错误,然后在关机时强制终止服务。

我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

从后台线程调用WinHttpCloseHandle以强制关闭句柄可能不是最佳解决方案。它仍然有效,并且原始调用者会收到类似“错误处理”错误代码的内容,并且请求将被强制终止。

滥用此权力可能不安全,而宁愿实施异步请求。但是,如果关闭陈旧服务,它将正常工作。