我正在通过一组 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 链接(由于隐私订阅问题,删除了一些链接)
蛊毒传说
相关分类