这里HttpClient怎么好像死锁了?我有一个在可移植类库中制作的API,需要使用特定于平台的API来发送HTTP请求。这是我为在WinRT上执行HTTPPOST而编写的方法:publicboolPost(IEnumerableheaders,stringdata){boolsuccess=false;HttpClient客户端=newHttpClient(newHttpClientHandler{AllowAutoRedirect=false});foreach(标头中的var标头){client.DefaultRequestHeaders.Add(header.Key,header.Value);}try{vartask=client.PostAsync(endpoint,newStringContent(data,Encoding.UTF8,"text/xml")).ContinueWith(postTask=>{try{postTask.Wait(client.Timeout);//等待时间不要超过客户端超时时间。success=postTask.Result.IsSuccessStatusCode;}catch{}},TaskContinuationOptions.LongRunning);任务。配置等待(假);任务。等待(客户端。超时);}赶上{成功=假;}返回成功;尽管有任何压力,这还是一个有趣的问题。它似乎在内部陷入僵局。就像我创建5个线程并从它们发送POST请求一样,该方法将到达除了超时之外什么都不做的地步。内容永远不会到达服务器,并且永远不会执行.Continue代码。但是,如果我连续运行它,甚至使用2或3个线程,它也能正常工作。似乎抛出的线程越多,性能呈指数下降我在这里做错了什么?我不认为这是你的问题所在,但它可能是,而且很容易实现和测试。默认情况下,Windows将“最大网络”连接设置为2,并且可以在连接池上锁定2个以上的线程。您可以将此添加到您的应用程序配置或代码中,您可以执行ServicePointManager.DefaultConnectionLimit=300我还考虑在后续中评论等待。我不认为这是必要的。try{//注释掉你已经在外部任务中处理它的这一行//postTask.Wait(client.Timeout);//不要等待超过客户端超时时间。成功=postTask.Result.IsSuccessStatusCode;}catch{}最后,如果上面的两件事不起作用,我会尝试注释这段代码。//任务.ConfigureAwait(false);可能Task.Wait加上设置Task.ConfigureAwait(false)的组合导致了某种死锁,但我不知道为什么。我只知道我有一些非常相似的代码可以很好地多线程运行,我的代码中没有Task.ConfigureAwait(false),主要是因为我尝试了HttpClient库但没有升级到.NET4.5,所以await不是可用的。以下是一些使用当前代码发布给我的内容:我有一个在可移植类库中制作的API,需要使用特定于平台的API来发送HTTP请求。我建议您的API是异步的,因为它正在执行HTTP。如果你想在PCL中完全支持异步/等待,你可以使用Microsoft.Bcl.Async。以上是C#学习教程:为什么HttpClient这里好像死锁了?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——publicasyncTaskPost(IEnumerable>headers,stringdata){HttpClientclient=newHttpClient(newHttpClientHandler{AllowAutoRedirect=false});foreach(varheaderinheaders){client.DefaultRequestHeaders.Add(header.Key,header.Value);}try{varresult=awaitclient.PostAsync(endpoint,newStringContent(data,Encoding.UTF8,"text/xml")).ConfigureAwait(false);返回结果.IsSuccessStatusCode;}赶上{返回假;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: