-1

Я пытаюсь получить ошибку, когда закончится мой запрос. Я отправляю requset из проекта клиентского проекта в сервер. это мой код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.

ответ

0

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

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

+0

когда я меняю этот код response = await client.GetAsync (uri, cts.Token) .Result; я получаю эту ошибку \t Не могу дождаться 'System.Net.Http.HttpResponseMessage' –

+0

Какая ошибка? Просто поймать (Исключение e), остановить с отладчиком и посмотреть на тип исключения –

+0

мое внутреннее исключение - {«Невозможно подключиться к удаленному серверу»} и system.net.webexception –

0
ichange code to this but i give this error in stack trace :          public ActionResult _DropDownSearch(SearchBindingModel Model) 
    { 
     Model.PageNumber = 1; 
     Model.PageSize = Properties.Settings.Default.SearchPageSizeAjax; 

     if (!ModelState.IsValid) 
     { return null; } 
     using (var client = new HttpClient()) 
     { 

      client.DefaultRequestHeaders.Accept.Clear(); 
      client.BaseAddress = ServiceHelpers.BaseAddress; 
      client.Timeout = ServiceHelpers.TimeOut; 
      client.DefaultRequestHeaders.Accept.Add(ServiceHelpers.Format); 

      HttpResponseMessage response = new HttpResponseMessage(); 
      Uri uri = new Uri("api/v1/Search/Search", UriKind.Relative).AttachParameters(new NameValueCollection 
                     { 
                      {"Query", HttpUtility.UrlEncode(Model.Query.Trim())}, 
                      {"PageNumber",Model.PageNumber.ToString()}, 
                      {"PageSize", Model.PageSize.ToString()} 
                    }); 
      System.Threading.CancellationTokenSource cts = new System.Threading.CancellationTokenSource(); 


      try 
      { 


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

       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 
         ; 
       } 

      } 

      return null; 
     } 

} StackTrace = "в System.Threading.Tasks.Task.ThrowIfExceptional (Boolean) includeTaskCanceledExceptions \ г \ п на System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification)\r\n at System.Threading.Tasks.Task 1.get_Result() \ г \ п на

 Смежные вопросы

  • Нет связанных вопросов^_^