繁体   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