httpClient.PostAsync 中的线程已中止问题

Thread was aborted issue in httpClient.PostAsync

当我向其他人发送请求时 api 程序将崩溃并且线程被中止将发生。 请指教。

    public async Task<TResponse> Post<TRequest, TResponse>(string method, TRequest request)
    {
            JsonMediaTypeFormatter jsonFormat = new JsonMediaTypeFormatter
            {
                SerializerSettings =
                {
                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore,
                    NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore,
                    PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None
                }
            };

            var response = await _httpClient.PostAsync(_baseUrl + method, request, jsonFormat);
            var finalResponse = await response.Content.ReadAsAsync<TResponse>();

            return finalResponse;
    }

请注意,不会向服务器发送任何请求。顺便说一句,_httpClient 将定义如下

        _httpClient =
            new HttpClient(new HttpClientHandler
                {
                    AutomaticDecompression =
                        System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate
                })
                {Timeout = TimeSpan.FromSeconds(50)};
        _httpClient.DefaultRequestHeaders.Add("Authorization", "apikey " + apiKey);

我自己弄明白了,原来PostAsync会调用其他方法取消当前线程。所以我删除了 await 关键字并得到了最终结果。

var response = _httpClient.PostAsync(_baseUrl + method, request, jsonFormat).Result;

我们还收到“线程正在中止”错误。

对我们来说,我们对 httpClient.PostAsync 的调用来自单元测试。

一旦我们将单元测试方法签名更改为 async,并且调用 awaitPostAsync 就成功了。

[TestMethod]
public async Task Test_blah()
{
   ...
   // Act 
   var response = await testController.Call();
   ...
}