1) Sie haben 10 Abonnenten für ein Ereignis in Ihrer .NET-Anwendung. Sobald Sie das Ereignis aufrufen, werden die Abonnenten synchron oder asynchron benachrichtigt?
2) Sie haben 10 Abonnenten für ein Ereignis in Ihrer .NET-Anwendung. Jetzt hat ein Event-Handler einen schlechten Code und löst eine Exception aus. Werden die anderen neun Ereignishandler weiterhin ausgeführt?
Danke,
Sie haben 10 Abonnenten für eine Veranstaltung in Ihre Bewerbung. Sobald du das aufgerufen hast Ereignis werden die Abonnenten benachrichtigt synchron oder asynchron?
Es hängt davon ab, wie der Publisher das Ereignis aufruft. In dem typischen Fall (z. B. einem C # -Feld-ähnlichen Ereignis) sind die Handler nur Mitglieder der Aufrufliste eines Multicast-Delegaten. Das Aufrufen des "Ereignisses" entspricht dem Aufruf des Delegierten Delegierten , was wiederum moralisch dem sequenziellen Aufruf jedes einzelnen Mitglieds entspricht. So könnte man einmal einen Aufruf sehen wie:
%Vor%als ähnlich zu:
%Vor%Es ist nur eine Sequenz von Delegiertenaufrufen: Die Abonnenten werden synchron benachrichtigt. Natürlich kann der Publisher wählen, das Ereignis beliebig aufzurufen , also muss er es nicht so machen - er kann den Thread-Pool (QUWI / BeginInvoke) oder irgendeinen anderen Mechanismus verwenden das erzeugt asynchrone Benachrichtigungen.
Sie haben 10 Abonnenten für eine Veranstaltung in Ihre Bewerbung. Jetzt ein Ereignis Der Handler hat einen schlechten Code und er wirft eine Ausnahme. Mache die anderen neun Ereignisse Handler fahren noch fort?
Es kommt wieder darauf an. Im typischen (oben genannten) Fall lautet die Antwort nein , da Ausnahmen nicht pro Abonnent behandelt werden. Wenn ein Handler wirft, wird der Rest der "foreach" aufgegeben. Natürlich gibt es nichts, was einen Publisher davon abhält, den Aufruf jedes Handlers in einen try-catch (ignore) -Block zu verpacken, oder einen anderen Mechanismus zu verwenden, um sicherzustellen, dass alle Handler aufgerufen werden.
1) Kein Threading. Methoden (Teilnehmer) werden synchron ausgeführt.
2) Es kommt darauf an. Die verbleibenden Teilnehmer werden nur ausgeführt, wenn die Ausnahme behandelt wird. Eine Ausnahme hält den Code / Thread sofort an, wenn sie nicht bearbeitet wird. Dies bedeutet, dass wenn 2 von 10 Subskriptions-Methoden ausgeführt wurden, wenn die Ausnahme auftritt, die remaning 8 nicht ausgeführt wird.
Ereignisse sind einfach Listen von Methoden, die aufgerufen werden sollen. .Net macht das für Sie hinter den Kulissen.