Frage

Bei der Ausführung eines Threads Abbruchs Ich bin immer zu zweifeln zwischen einem guten Abgang mit einem Event-Handler wie folgt aus:

int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
  FinalizeAndExit();

und mit der Veranstaltung den Faden zu signalisieren, es beenden muss

oder Handhabung nur die Threadabort den Faden fertig zu stellen ...

try
{
  // Main execution
}
catch(ThreadAbortException e)
{
  // FinalizeAndExit();
}
finally
{
}

Ich bin in der Regel geneigt, den Threadabort Ansatz zu verwenden, da es behandelt werden kann, aber es ist am Ende des catch-Blockes wieder angehoben, und es vermeidet auch den Faden von durch „heimtückisch“ Methoden lebendig gehalten werden, aber ich Haben beiden Ansätze gesehen.

Was ist Ihre Meinung? Gibt es eine Situation, wo es am besten ist, übereinander zu verwenden, oder ist es am besten immer verwenden x Ansatz?

War es hilfreich?

Lösung

Im Allgemeinen ist die erste Methode es preferrable.

Es ist schwer (wenn nicht unmöglich), Code zu schreiben, die eine Threadabort anmutig immer behandelt. Die Ausnahme kann in der Mitte auftreten wie auch immer der Faden zu tun, geschieht, so können einige Situationen schwer zu handhaben sein.

Zum Beispiel kann die Ausnahme auftreten, nachdem Sie ein Filestream-Objekt erstellt haben, aber bevor der Verweis auf eine Variable zugeordnet ist. Das bedeutet, dass Sie ein Objekt, das entsorgt werden soll, aber der einzige Verweis auf sich auf den Stapel irgendwo verloren ...

Andere Tipps

Wenn ich kann ich versuchen, mit Thread.Abort zu vermeiden. Das Problem mit Thread.Abort ist, dass es in (fast) jeder Zeile des Ausführung von Code und kann dazu führen, einige „interessante“ Verhalten (sprich: Bugs) passieren könnte. Intead ziehe ich einen Punkt der Ausfahrt auf meinem Code zu haben, die für eine Veranstaltung oder eine Variable überprüft, ob es sollte der Faden nicht mehr ausgeführt und ordnungsgemäß zu beenden.

Sicher, wenn das Beendigungsereignis erwartet wird, dann ist es keine Ausnahme (durch die strenge Definition des Begriffs), so deshalb sollten Sie die erste Methode verwendet werden. Eine anmutige Ausfahrt zeigt auch, dass Sie die Kontrolle haben.

Während Ausnahmen sinnvoll und in einigen Fällen notwendig sind, können sie und sie überstrapaziert bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top