2 Stimmen

Ausnahmeregelungen bei der Erstellung eines SynchronizationContext?

Ich erstelle eine STA-Version des Synchronisationskontext für die Verwendung in Windows Workflow 4.0. Ich frage mich, was über Ausnahmen zu tun, wenn Post-ing Rückrufe.

Le site Synchronisationskontext kann verwendet werden, um Senden Sie (synchrone Ausführung) oder Beitrag (asynchrone Ausführung) Delegierte des Typs SendOrPostCallback . Obwohl ich in beiden Fällen den Delegaten auf einem STA-Thread aufrufe, ist es einfach zu wissen, wie man Ausnahmen bei der synchronen Ausführung behandelt. Ich blockiere den aufrufenden Thread, rufe den Callback auf meinem Worker-Thread auf, zeichne alle Ausnahmen auf, hebe die Blockierung des aufrufenden Threads auf und werfe alle aufgezeichneten Ausnahmen auf den aufrufenden Thread.

Was sollte ich bei der asynchronen Beitrag ist weniger klar. Es gibt keinen Mechanismus, um diese Ausnahme vom ausführenden Thread zurück an den aufrufenden Thread zu übermitteln; Beitrag ist 100% Feuer und Vergessen. Es gibt keine EndInvoke() o WaitHandle im SendOrPostCallback . Jede ausgelöste Ausnahme führt dazu, dass die Anwendung abgebrochen wird.

Habe ich keine andere Wahl, als eine Ausnahme, die in einer Beitrag meine Bewerbung verwerfen? Das scheint das Standardverhalten in der Synchronisationskontexte im Rahmen (danke, Reflector). Ich kann mir nicht erklären, warum das so ist. Sollte es nicht sein algunos Weg zur Verhinderung asynchroner Beitrag s vor der Explosion?

5voto

JaredPar Punkte 699699

In solchen Situationen lasse ich mich vom Substitutionsprinzip leiten. Ich würde das gleiche Verhalten implementieren wie die vorhandenen Instanzen von SynchronizationContext . Ein anderes Vorgehen verstößt gegen das Substitutionsprinzip und könnte sich auf unerwartete Weise rächen.

2voto

Brian Punkte 115257

Sterben ist großartig.

Wird "Sterben ist geil" bevorzugt?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X