簡體   English   中英

HttpClient.SendAsync是否顯然崩潰或阻止?

[英]HttpClient.SendAsync APPARENTLY crashing or blocking?

我在這里有一個真正的難題,但首先要有一些背景知識。

我正在開發(在學習C#和.Net的同時)一個WPF應用程序,該應用程序

  • 使用HttpClient連接到一台網絡設備
  • 將日志文件下載為.csv(登錄后)
  • 整理日志條目並將其顯示在GridView中

我一直在學習的方法是將每個組件(登錄,get_log,process_log等)分別作為控制台應用程序編寫,然后將它們全部集成到WPF框架中。

如您所料,我能夠使所有單個功能獨立工作。 但是當我將所有部分放在一起時,似乎應用程序無法通過初始連接-本質上是http://10.0.0.1/login.html?/main.html的GET。 我逐步瀏覽了WPF版本,發現它進入了client.SendAsync()調用,但從未退出過。 (HttpClient實例的超時設置為默認的100秒,我等待的時間比這更長。)

當程序“掛起”時,應用程序的主窗口完全沒有響應:最小化,最大化或關閉控件均無效。 我什至不能拖動窗口,盡管我可以單擊其他窗口,然后再次單擊以重新獲得焦點。

當我用Wireshark觀察網絡流量時,我看到我的應用程序發送GET請求,並且遠程設備以200 OK和適當的HTML內容進行響應,但此后沒有其他響應。

我已經仔細檢查了WPF版本和控制台版本(對於此特定部分)之間的代碼,它們是相同的。

因此,我的問題是:

  1. 有人看過這樣的東西嗎?
  2. 關於如何確定發生了什么的任何建議?

有人看過這樣的東西嗎?

關於如何確定發生了什么的任何建議?

切勿在異步方法上使用.Wait().Result 請改用await 在控制台應用程序上,此“可能”沒有問題,因為它沒有同步上下文。 但是在WPF應用程序上,如果它在UI線程上運行,幾乎可以保證會陷入死鎖。

如果您對更多細節感興趣,Stephen Cleary在他的博客中得到了很好的解釋。

異步/等待解決阻塞問題

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        using (var httpClient = new HttpClient())
        {
            httpClient.BaseAddress = new Uri("http://localhost");
            HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Post, "users");
            httpRequest.Content = new StringContent("{name:'admin'}");
            var httpResponse = await httpClient.SendAsync(httpRequest);
            //process http response
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM