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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top