我有下面这段代码,我想使用HttpClient
向远程端点发起请求:
using (var client = new HttpClient())
{
client.BaseAddress = _serviceBaseAddress;
Task<HttpResponseMessage> readResponseTask = client.GetAsync(relativeUri);
readResponseTask.Wait();
using (var response = readResponseTask.Result)
{
if (response.StatusCode == HttpStatusCode.NotFound || !response.IsSuccessStatusCode)
{
return default(TResult);
}
Task<TResult> readContentTask = response.Content.ReadAsAsync<TResult>();
readContentTask.Wait();
TResult value = readContentTask.Result;
return value;
}
}
偶尔,我会在readResponseTask.Result
处收到ThreadAbortException
异常,如下所示:
System.Threading.ThreadAbortException:线程正在被终止。 在 System.Threading.Monitor.ObjWait(Boolean exitContext, Int32 millisecondsTimeout, Object obj) 在 System.Threading.ManualResetEventSlim.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 在 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 在 System.Threading.Tasks.Task.InternalWait(Int32 millisecondsTimeout, CancellationToken cancellationToken) 在 System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
在什么情况下会导致.Result
抛出这样的异常?我曾试图模拟远程终端上的超时,但却在.Wait()
处而不是.Result
处接到异常。 由于异常发生在.Wait()
之后,我猜测结果已经从远程站点返回,但在尝试访问结果时发生了错误。
有任何线索吗?可能与线程并发有关吗?