use*_*346 7 c# multithreading thread-safety asp.net-web-api
我有以下代码,我正在尝试使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
..和偶尔我会得到ThreadAbortException的readResponseTask.Result,像这样:
System.Threading.ThreadAbortException:线程正在中止.at System.Threading.Monitor.ObjWait(Boolean exitContext,Int32 millisecondsTimeout,Object obj)at System.Threading.ManualResetEventSlim.Wait(Int32 millisecondsTimeout,CancellationToken cancellationToken)at 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(),我假设结果已经从远程站点返回但是在尝试访问结果时出现了某些问题.
有线索吗?它可能与线程并发有关吗?