亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WebRequest 的 GetResponseAsync 不穩定,而 GetResponse 不是

WebRequest 的 GetResponseAsync 不穩定,而 GetResponse 不是

C#
慕姐8265434 2022-07-23 18:07:37
我正在通過一組 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);

    }

}


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 309 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號