Quais exceções não devo pegar?

Tenho um aplicativo que executa um longo processo em lote no qual muitas exceções podem ser lançadas. Se uma exceção não crítica for lançada durante um item do lote, desejo simplesmente registrá-la e continuar, para que possamos corrigir o problema mais tarde, deixando os outros itens do lote continuare

Algumas exceções, comoOutOfMemoryException, são devastadores para o aplicativo como um todo, e eu gostaria de relançá-los para que eles atinjam o manipulador de exceção global que registrará o erro e interromperá o aplicativ

Então, minha pergunta é: existe uma lista razoavelmente curta de exceções críticas que eu posso repetir no meu manipulador de exceções mais baixas enquanto suprimo (após o registro) de todo o rest

Obrigado

Editar Para elaborar um pouco, aqui está a estrutura básica do meu programa

foreach(var item in longItemList)
{
   try
   {
      bigDynamicDispatchMethod(item);
   }
   catch(Exception ex)
   {
      logException(ex);
   }
}

Há potencialmente um grande número de exceções que podem ser lançadas porque esse loop está praticamente no nível superior do meu aplicativo. 99% do código no meu projeto está por trás do método de envio. Eu manuseio razoável de exceções em níveis mais baixos, mas os erros ainda funcionam e não quero interromper outros processos não relacionados no lote depois que uma exceção é lançad

entar descobrir quais exceções poderiam ser lançadas em qualquer outro lugar do meu aplicativo parece uma tarefa assustadora, e parecia que seria mais simples obter uma lista negra de exceções crítica

Existe uma maneira melhor de estruturar meu aplicativo para lidar com isso? Estou aberto a sugestões

questionAnswers(6)

yourAnswerToTheQuestion