TaskCanceledException не работает в HttpClient

Я пытаюсь получить ошибку, когда мой запрос истек. я посылаю реквизит из клиентского проекта в серверный проект. это мой код

  System.Threading.CancellationTokenSource cts = new System.Threading.CancellationTokenSource();


            try
            {


                response = await client.GetAsync(uri, cts.Token);

                if (response.IsSuccessStatusCode)
                {
                    // Serialize
                    var ObjSerializeReciveData = response.Content.ReadAsStringAsync().Result;
                    var ObjDeDeserializeReciveData = JsonConvert.DeserializeObject<ResponseModel<PagedListResult<SearchContentSimplifiedDTO>>>(ObjSerializeReciveData);

                    //ViewBag.Query = Model.Query;
                    if (ObjDeDeserializeReciveData == null || ObjDeDeserializeReciveData.Data.TotalCount == 0)
                    {
                        return null;
                    }
                    return PartialView("_DropDownSearch", ObjDeDeserializeReciveData.Data);


                }
            }

            catch (System.Threading.Tasks.TaskCanceledException)
            {
                if (cts.Token.IsCancellationRequested)
                {
                    return null

.................

я отправляю запрос на сервер и, например, сервер выключен, после чего истекает время ожидания моего запроса и возвращаю исключение CancellationTokenSource . но мой улов не работает, чтобы получить исключение ошибки. Thnks.

1 ответ

Решение

Призвание .Result сгенерирует AggregateException. В этом случае вы найдете исключение TaskCanceledException.

Есть два способа сделать это:catch (AggregateException e) и там вы можете проверить e.InnerExceptionsИли вы делаете .GetAwaiter().GetResult() вместо. Это должно бросить TaskCanceledException.

Другие вопросы по тегам