我花了很多时间试图弄清楚这一点,但不幸的是没有结果。我将不胜感激。

问题是,尽管我使用PostAsyncawait,但ConfigureAwait(false)调用阻止了事件。在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的article。还要检查this

关于c# - 即使使用ConfigureAwait(false),HttpClient的PostAsync方法也会阻塞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37483195/

10-10 19:30