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.