Frage

Ich schreibe eine Instant Messaging -Bibliothek. Derzeit beginne ich, wenn eine SocketException beim Lesen oder Schreiben in den Socket angehoben wird, die Abmeldoutine aus der Anwendung und übergibt die SocketException an den Enduser als Argument der Abmeldungventargs. Dies gibt dem Endbenutzer eine Möglichkeit, zu sehen, welche zugrunde liegende Ausnahme tatsächlich das nicht formulierte Abmelden verursachte.

Meine Frage ist, was ich tun soll, wenn während eines Benutzeraufrufs bei der Abmeldungsfunktion der Socket tatsächlich eine Ausnahme ausgelegt hat.

Beispiel - Endbenutzer -Aufruffunktion und während die Funktion der Abmeldung auf vorhandene Anfragen wartet, um ordnungsgemäß zu enden, legt der Socket eine Ausnahme in den Lese -Thread aus.

Ich habe zwei Optionen, wie ich es sehe -

  1. Stellen Sie sich vor, der Fehler sei nicht aufgetreten und verhalten Sie sich einfach wie der Sockel, der als Teil unseres Abmeldens getrennt ist.

  2. Wenn die Socket -Ausnahme ausgelöst wird, prüfen Sie, ob eine Abmeldungsanforderung stattfindet, und wenn ja, überschreiben Sie sie. Dies führt zu der ursprünglichen Abmeldungsanforderung, die eine bereitsloggedoutexception sowie ein separates Abmeldeereignis veranstaltet, das die Ausnahme in den LogoutEventArgs weitergibt.

Außerdem leicht verwandt - Was soll ich tun, wenn der Server eine Abschaltung initiiert, die nicht angefordert wurde (dh der Leseanruf kehrt NULL zurück). mag es nicht. Behandle ich das als Ausnahme an sich?

Ich habe festgestellt, dass der gesamte Teil meiner Bibliothek ein großer Dorn in meiner Seite ist. Ich kann einfach nicht meinen Kopf darum wickeln. Kennt jemand Open -Source -Code -Anwendungen, die diese Situation wunderbar behandeln?

Ich habe so lange versucht, dieses Ding in meinem Kopf anzugehen, dass es mich verrückt macht.

War es hilfreich?

Lösung

Ich habe mich entschlossen, die SocketException nicht an den Endbenutzer zu übergeben, da eine Trennung keine wirklich Ausnahme ist und zu erwarten ist und behandelt werden sollte. Stattdessen gibt es eine LogoUtasason -Eigenschaft in den LogoutEventArgs, die angibt, warum das Abmelden aufgetreten ist.

Ich entschied, dass, wenn die Trennung während des Abmeldes auftritt, das eigentlich keine Ausnahme ist, da der Abmeldung ohnehin trennen würde. Ich ignoriere einfach die Ausnahme in diesem Fall.

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