Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

345
Visualizações
C# async await (try/) catch falla en .NET 6

El siguiente código funciona como se esperaba en (el código subyacente de un UserControl de WPF de un proyecto .NET 4.8 ).

 private async Task DeleteAsync() { try { await ViewModel.DeleteAsync(GetSelectedItems()); } catch (Exception ex) { var doCatch = ex is ValidationException || ex is ExpectedInfoException || ex is ExpectedDbException; if (doCatch) ExeptionHelper.HandleException(ex, AppConstants.ApplicationName); else throw; } }

El siguiente experimento analógico no siempre detecta una excepción en un proyecto .NET 6.0; consulte los comentarios en línea. Mi intento de una muestra de reproducción mínima reproducible aún no está completo, pero espero que alguien ya tenga una suposición educada del motivo.

 private async void DeleteListAsync() { var list = ViewModel.GetSelectedItems( dataGrid.SelectedItems.OfType<ActorModel>().ToList()); try { await ViewModel.DeleteListAsync(list); } catch (Exception ex) when ( ex is ValidationException || ex is ExpectedInfoException || ex is ExpectedDbException) { /* this part does run as expected when() one of those three * custom MyNamespace.Exceptions gets thrown in the previous `try` block. * But unexpectedly *not when thrown inside the nested step-into code of * ViewModel.DeleteListAsync() */ ApplicationHelper.HandleException(ex, Intl.LocalizedConstants.AppName); } catch { /* this part does run as expected when a `new InvalidOperationException("Test")` * or `NotImplementedException()` gets thrown directly in the `try`block. * Also when thrown inside the nested step-into code of * ViewModel.DeleteListAsync() */ throw; } }

[Resuelto]: mucho más tarde, con la ayuda de los comentarios útiles, encontré una declaración de espera faltante en un rincón aislado y oscuro del código anidado, tal como dijo @Charlieface, ¡muchas gracias a todos!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Aparentemente, falta una await en algún lugar de su código, lo que está causando que una excepción se envuelva en una AggregateException .

Una de las cosas que hace await , además de configurar la maquinaria de estado, es desenvolver las excepciones AggregateExceptions que contienen las excepciones que se generaron durante la ejecución de la Task . Por lo tanto, si desea capturar y manejar un tipo de excepción específico, debe usar await hasta el final.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda