![](/img/trans.png)
[英]C# HttpClient - PostAsync doesn't return (even with ConfigureAwait)
[英]HttpClient's PostAsync method blocks even though ConfigureAwait(false) is used
我花了很多时间试图弄清楚这一点,但不幸的是没有结果。 我将不胜感激。
问题是尽管我使用await
和ConfigureAwait(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
编辑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);
}
}
顺便说一句,感谢斯蒂芬的出色文章。 他们有很多帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.