"ThreadAbortException" - vs-anmutige Ereignis-handle Ausfahrt in C#
Beim Abbruch der Ausführung eines Threads, ich bin immer zweifelt, zwischen einer anmutigen Ausfahrt mit einem event-handler wie diese:
int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
FinalizeAndExit();
und mit dem event zu signalisieren, den thread muss es beenden
oder einfach nur die Handhabung der "ThreadAbortException" -, um abschließend zu dem thread...
try
{
//Main execution
}
catch(ThreadAbortException e)
{
//FinalizeAndExit();
}
finally
{
}
Normalerweise bin ich geneigt zu verwenden, die "ThreadAbortException" - Ansatz, da es behandelt werden kann, aber es ist re-raiste am Ende des catch-Blocks, und es vermeidet auch den thread am Leben gehalten, durch "verräterische" Methoden, aber ich habe gesehen, beide Ansätze.
Was ist Ihre Meinung? Gibt es eine situation, wo es ist am besten, um eine über die andere, oder ist es am besten benutzen Sie immer den Ansatz x?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen die erste Methode vorzuziehen.
Es ist schwer (wenn nicht unmöglich), um code zu schreiben, der immer Griff eine ThreadAbortException anmutig. Die Ausnahme kann auftreten, in der Mitte von dem, was der thread passiert, zu tun, so dass einige Situationen können schwierig sein zu behandeln.
Beispielsweise die Ausnahme kann auftreten, nachdem Sie erstellt ein FileStream-Objekt, aber bevor die Referenz einer Variablen zugewiesen ist. Das bedeutet, dass Sie haben ein Objekt, das entsorgt werden sollte, aber die einzige Referenz an, ist es verloren auf dem Stapel irgendwo...
Wenn ich kann versuche ich zu vermeiden, mit Gewinde.Abort.
Das problem mit dem Thread.Abort ist, dass es passieren könnte, in (fast) jede Zeile der code ausgeführt, und könnte dazu führen, dass einige "interessante" Verhalten (sprich: bugs).
Intead ich lieber mit der Ausfahrt auf meinen code, der überprüft, ob ein Ereignis oder eine variable zu sehen, ob der thread beendet werden soll und ordnungsgemäß beenden.
Sicherlich, wenn die Kündigung Ereignis erwartet wird, dann ist es nicht eine Ausnahme (von der strengen definition der Begriff) also, Sie sollten mit der ersten Methode. Ein ordnungsgemäßes beenden zeigt auch, dass Sie die Kontrolle.
Während die Ausnahmen sind sinnvoll und in einigen Fällen notwendig, Sie können und tun, bekommen überbeansprucht.