C# HttpClient post挂起超时

C# HttpClient post挂起超时,c#,timeout,dotnet-httpclient,C#,Timeout,Dotnet Httpclient,我有以下代码 var httpClientHandler = new HttpClientHandler() { UseDefaultCredentials = true, PreAuthenticate = false, }; var webclient = new HttpClient(httpClientHandler); webclient.BaseAddress = new Uri("http://localhost"); webclient.Timeout = new

我有以下代码

var httpClientHandler = new HttpClientHandler()
{
    UseDefaultCredentials = true,
    PreAuthenticate = false,
};
var webclient = new HttpClient(httpClientHandler);
webclient.BaseAddress = new Uri("http://localhost");
webclient.Timeout = new TimeSpan(1);

var res = webclient.PostAsync("http://localhost/test", "'test'", new JsonMediaTypeFormatter()).Result; //.ContinueWith(x => ProcessResult(x));
.Result阻塞线程并挂起应用程序。如果我用continuation替换它,它将永远不会执行

如果我增加超时时间,代码就会工作,因此它似乎是失败的超时时间

我已经通过使用另一个任务超时解决了这个问题,但我想更好地理解它

if (await Task.WhenAny(task, Task.Delay(new TimeSpan(0, 0, 0, 20))) == task)
{
    //success
}
else
{
     //failure
}

可能是重复的:我意识到这是由于例外。如果我钩住TaskScheduler.UnobservedTaskException事件,我可以看到正在引发的异常。NoStratio-问题类似。然而,我不想知道如何设置超时,但为什么它挂起并且从不进入continuewith。此外,get将永远不会挂起-它将引发任务取消异常。帖子挂起了。我想你在HttpClient中遇到了一个bug。它将丢失在上传帖子内容时引发的任何异常,并且任务挂起。看见这在最新版本的nuget软件包中得到了修复,该软件包将在.Net 4.0、Phone和Silverlight上提供帮助,但您需要等待.Net 4.5.*的下一版本,其中HttpClient是.Net的一部分。