ThreadAbortException vs punho saída evento graciosa em C #
-
03-07-2019 - |
Pergunta
Quando abortar a execução de um segmento Estou sempre duvidando entre uma saída graciosa com um manipulador de eventos como este:
int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
FinalizeAndExit();
e usar o evento para sinalizar o segmento deve terminar
ou apenas lidar com o ThreadAbortException para finalizar o segmento ...
try
{
// Main execution
}
catch(ThreadAbortException e)
{
// FinalizeAndExit();
}
finally
{
}
normalmente estou inclinado a usar a abordagem ThreadAbortException uma vez que pode ser tratada, mas é no final do bloco catch levantou-re, e também evita o fio de ser mantido vivo por métodos "traiçoeiras", mas eu 'vi ambas as abordagens.
Qual é a sua opinião? Existe alguma situação em que é melhor usar um sobre o outro, ou é melhor usar sempre aproximar x?
Solução
Geralmente, o primeiro método que preferrable.
É difícil (se não impossível) para escrever código que sempre lidar com uma ThreadAbortException graciosamente. A exceção pode ocorrer no meio de tudo o que o fio passa a ser fazendo, então algumas situações pode ser difícil de manusear.
Por exemplo, a exceção pode ocorrer depois de ter criado um objeto FileStream, mas antes a referência é atribuído a uma variável. Isso significa que você tem um objeto que devem ser eliminados, mas a única referência a ele é perdido no algum lugar pilha ...
Outras dicas
Se eu posso tentar evitar o uso Thread.Abort. O problema com Thread.Abort é que poderia acontecer em (quase) qualquer linha do código em execução e pode causar algum comportamento "interessante" (leia-se: bugs). Intead eu prefiro ter um ponto de saída no meu código que verifica a existência de um evento ou variável para ver se o fio deve parar de correr e graciosamente saída.
Com certeza, se a rescisão é esperado, então não é uma exceção (pela definição estrita do termo) assim, portanto, você deve estar usando o primeiro método. Uma saída honrosa também mostra que você está no controle.
Enquanto exceções são úteis e, em alguns casos necessário, eles podem e fazem chegar em demasia.