![]() |
Created by Thiago Russo
over 8 years ago
|
|
Question | Answer |
Throwing exceptions exemplo |
Image:
Throw New Exc (image/png)
|
ao relançar exceptions, devemos reutilizar os obj de exceção? quais são as maneiras de relançar uma exception? | Vc ñ deve tentar reutilizar objetos de exceção. Cada vez que lançar uma exceção, deve criar um novo obj, principalmente qdo se trabalha em um ambiente multithread, o rastreamento de pilha de sua exceção pode ser alterado por outra thread. Qdo capturar uma exceção, vc pode optar por relançar a exceção. Vc tem três maneiras de fazer isso: ■ palavra-chave throw s/ identificador. ■ palavra-chave throw c/ a exc original. ■ palavra-chave throw c/ nova exceção. A 1ª opção relança a exceção s/ modificar a pilha de chamadas e deve ser usada qdo vc ñ quer quaisquer modificações p/a exceção. |
Rethrowing an exception com a 1ª opção: throw s/ identificador |
Image:
Rethrowing (image/png)
|
Rethrowing an exception com a 2ª opção: throw c/ a exc original | redefinir a pilha de chamadas para o local atual no código. Então você não pode ver de onde a exceção veio originalmente, e é mais difícil para depurar o erro. |
Rethrowing an exception com a 3ª opção: throw c/ nova exceção | Usando a terceira opção pode ser útil quando você quiser levantar outra exceção para o chamador de seu código. |
MessageQueueException | Digamos q vc está trabalhando em um aplicativo de pedidos. Qdo um user faz um pedido, vc imediatamente coloca o pedido em uma fila de mensagens para q outro aplicativo possa processá-lo. Qdo acontece um erro interno na fila de mensagens, uma exceção do tipo MessageQueueException é levantada. Para users do seu aplicativo de pedidos, esta exceção ñ fará qualquer sentido. Em vez disso, lance outra exceção, algo como um uma exceção customizada: OrderProcessingException e definir o InnerException para a exceção original. |
Nunca engula exception * dica de exame | Certifique-se de q vc ñ engula quaisquer detalhes de exceção quando relançar uma exceção. Lance uma nova exceção q aponta p/ a original qdo vc quiser adicionar informações extras; caso contrário, use a palavra-chave throw sem um identificador para preservar os detalhes da exceção originais. |
exemplo de: A exceção original é preservada, incluindo o rastreamento de pilha, e uma nova exceção com informações extra é adicionado |
Image:
Throw New 2 (image/png)
|
ExceptionDispatchInfo.Throw | Nova opção do C#5 que pode ser encontrado no namespace System.Runtime.ExceptionServices. Este método pode ser usado para lançar uma exceção e preservar o rastreamento de pilha inicial. Você pode usar esse método mesmo fora de um bloco catch |
ExceptDispatchInfo exemplo | |
ExceptionDispatchInfo e Threads conceito e exemplo de onde o .Net framework usa isso | Este recurso pode ser usado qdo vc quer capturar uma exceção em uma thread e jogá-lo em outra thread. Usando a classe ExceptionDispatchInfo, vc pode mover os dados de exceção entre threads e lançar. O .NET Framework usa isso ao lidar c/ o os recursos async / await. Uma exceção que é lançada em uma thread async será capturada e relançada na thread de execução. |
Qdo lançar Exceptions? | Vc ñ deve lançar exceções qdo se lida c/ situações esperadas. Vc sabe que qdo os usuários começarem a inserir informações em seu app, eles vão cometer erros. Talvez eles insiram um nº no formato errado ou se esqueçam de inserir um campo obrigatório. Lançar uma exceção para estes tipos de situações esperadas não é recomendado. Manipulação de exceção altera o fluxo normal esperado do seu programa. Isso torna mais difícil de ler e manter o código que utiliza exceções, especialmente quando eles são usados em situações normais. |
Como é o desempenho de Exceptions? | Usando exceções tb incorre em uma queda de performance pq o runtime tem que pesquisar todos os blocos catch exterior até encontrar um bloco correspondente, e qdo isso não acontece, tem que procurar se um depurador está anexado, é preciso um pouco mais de tempo para lidar com isso. |
Algumas exceções são lançadas apenas pelo runtime. Você não deve usar essas exceções no seu próprio código (listar 9) | ArithmeticException ArrayTypeMismatchException DivideByZeroException IndexOutOfRangeException NullReferenceException OutOfMemoryException OverflowException StackOverflowException TypeInitializationException |
exceções populares do .NET Framework que você pode usar (listar 9) | Exception ArgumentException ArgumentNullException ArgumentOutOfRangeException FormatException InvalidOperationException NotImplementedException NotSupportedException ObjectDisposedException |
Want to create your own Flashcards for free with GoConqr? Learn more.