Exceptions em Thread Paralelas – Estendendo TTask

Quando estamos executando um código em um processo paralelo (Thread) e ocorre uma Exception internamente, normalmente nada é apresentado ao usuário.

Isso ocorre por que a Thread em paralelo não consegue notificar a Thread Principal da aplicação para exibir a exceção pro usuário.

Vamos demonstrar um exemplo:

Executando o código é possível constatar que o procedimento levanta uma exceção e o usuário não recebe a informação de erro.

Stefan Glienke criou uma classe herdada de ITask e TTask com melhorias e mais simples de implementar para permitir tratar as exceções que ocorrem dentro da Thread.
Ele utilizou como modelo a Task.ContinueWith do .NET que permite continuar a execução após a ocorrência da exceção. Unit ThreadingEx:

Exemplo de como utilizar a nova implementação de TTask:

Melhorando o tratamento da exceção:

Se utilizarmos o código padrão:

O retorno da mensagem será: “One or more errors occurred”

Para resolver isso podemos utilziar:

E o retorno será:

One or more errors occurred

1 exceptions(s):

#0 Exception: Test Error

Isso ocorre pois podemos ter mais de um erro dentro da Exception.

Para melhorar podemos utilizar EAggregateException que contem as propriedades: Count e InnerExceptions[ ]

Exemplo 1:

Exemplo 2:

Assim caso tenha mais de uma mensagem de exception poderemos exibi-las ao usuário.

Créditos: http://tireideletra.wbagestao.com/index.php/2016/03/24/exceptions-em-thread-paralelas-extendendo-ttask/