我正在通过一组 URL 执行许多请求,因此我可以检查哪些请求可以检索 PDF 文件。为了做到这一点,我创建了一个WebRequestwithHEAD方法,然后检查我得到的响应。当我执行webRequest.GetResponse()(同步)时,一切似乎都运行良好,并且每个请求都被“触发”了。另一方面,当我await webRequest.GetResponseAsync()第三次执行时,它根本没有达到方法的结尾。由于它实际上是try-catch为了处理可能无法访问的主机,所以它只是忽略了该链接。Async版本:private async Task<IEnumerable<string>> GetLinksContainsDownloadablePdfAsync(IEnumerable<string> linksInMail){ var downloadableLinks = new List<string>(); foreach (var link in linksInMail) { var headRequest = WebRequest.Create(link); headRequest.Method = "HEAD"; try { var responseTest = await headRequest.GetResponseAsync(); if (responseTest.Headers["Content-Type"].Contains("application/pdf")) downloadableLinks.Add(link); } catch (WebException) { //If it's not accesible, just ignore it } } return downloadableLinks;}Sync版本:private IEnumerable<string> GetLinksContainsDownloadablePdf(IEnumerable<string> linksInMail){ var downloadableLinks = new List<string>(); foreach (var link in linksInMail) { var headRequest = WebRequest.Create(link); headRequest.Method = "HEAD"; try { var responseTest = headRequest.GetResponse(); if (responseTest.Headers["Content-Type"].Contains("application/pdf")) downloadableLinks.Add(link); } catch (WebException) { //If it's not accesible, just ignore it } } return downloadableLinks;}任何人都可以在这里帮忙扔一些灯吗?我Exception实际上没有得到任何东西,调试器甚至没有到达这return downloadableLinks条线。请注意,这将在服务器中运行,因此我对多线程友好特别感兴趣。编辑:这个方法不是唯一的async,我从 other 调用它async methods,所以我应该正确处理它Task本身。编辑 2:为了提供更多信息来执行测试,这些是在电子邮件中找到的链接,而我遇到问题的电子邮件是来自每日在线报纸的电子邮件。我已经调试了每一个调用,并注意到它产生了 3 个调用,因为它被一些重定向(3xx)转移。这是几乎每个链接的 pastebin 链接(由于隐私订阅问题,删除了一些链接)
1 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
您没有正确处理响应对象。我能够使用调试器重现您的问题,经过几次点击后它变得不稳定并且没有点击下一行。
我认为您可以通过在获得新响应之前处理响应来解决此问题:
using (var response = await headRequest.GetResponseAsync())
{
if (response.Headers["Content-Type"].Contains("application/pdf"))
{
downloadableLinks.Add(link);
}
}
- 1 回答
- 0 关注
- 276 浏览
添加回答
举报
0/150
提交
取消