簡體   English   中英

即使使用ConfigureAwait(false),HttpClient的PostAsync方法也會阻塞

[英]HttpClient's PostAsync method blocks even though ConfigureAwait(false) is used

我花了很多時間試圖弄清楚這一點,但不幸的是沒有結果。 我將不勝感激。

問題是盡管我使用awaitConfigureAwait(false) ,但PostAsync調用阻止了事件。 在UI線程上調用以下處理程序:

private async void OnApplicationLaunching(object sender, LaunchingEventArgs e)
{
    using (var httpClient = new HttpClient())
    {
        var content = new List<KeyValuePair<string, string>>();

        var urlEncodedContent = new FormUrlEncodedContent(content);

        await httpClient.PostAsync("url address", urlEncodedContent).ConfigureAwait(false);
    }
}

編輯1

  • 我使用WindowsPhone 8.0 silverlight
  • 我認為這是一個僵局。 執行被阻止,直到出現異常消息“任務已取消”
  • 我對“生與死”不感興趣。 我需要確保在允許進一步執行之前已發送數據。

編輯2

這是另一個代碼示例,與以前的代碼示例沒有很大不同,但更像是Stephen博客中的代碼示例。

http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html中的 “防止死鎖”部分

http://blog.stephencleary.com/2012/02/async-and-await.html中的 “避免上下文”部分

private async void OnApplicationLaunching(object sender, LaunchingEventArgs e)
{
    await this.SendSth();

    // here I want to know for sure that data has already been sent
}

private async Task SendSth()
{
    using (var httpClient = new HttpClient())
    {
        var content = new List<KeyValuePair<string, string>>();

        var urlEncodedContent = new FormUrlEncodedContent(content);

        await httpClient.PostAsync("some url", urlEncodedContent).ConfigureAwait(false);
    }
}

順便說一句,感謝斯蒂芬的出色文章。 他們有很多幫助。

根據我對C#中異步編程的理解,應該在庫中調用ConfigureAwait

請參閱Stephen Cleary的這篇文章 也檢查一下

暫無
暫無

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

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