2012-04-10 5 views
0

Ich arbeite an einer Messenger-Bibliothek. Die Hauptklasse hat eine Login-Methode. Bei der Anmeldung werden alle Kontaktlistendaten heruntergeladen und gespeichert, bis die Anmeldung abgeschlossen ist. An diesem Punkt wird ein Ereignis UserAdded für jeden Benutzer ausgelöst, der heruntergeladen wurde.Wie eine große Anzahl von Ereignissen nacheinander zu erhöhen, ohne eine Ressource Schwein

Derzeit hebe ich die Ereignisse direkt am Ende der Login-Methode nacheinander auf. Das funktioniert, aber es bedeutet, wenn ich eine langwierige Operation in einem UserAdded-Ereignishandler ausführe, erhält der Bibliothekskonsument seine Ereignisse nicht rechtzeitig.

Eine Möglichkeit, um dies zu sehen, wäre, jedes Ereignis asynchron anzuheben, aber das würde den Threadpool durchdrehen.

Mache ich gerade den richtigen Weg? Soll ich in der Dokumentation einfach eine Warnung vor der Ausführung längerer Operationen in Event-Handlern notieren?

Antwort

1

Vielleicht möchten Sie vielleicht Ihren Event-Handler ändern, um einfach in eine ThreadSafe-Queue-Work-Item "in Warteschlange" zu stellen. Sie können dann einen einzelnen Thread haben, der die Warteschlange kontinuierlich pumpt, um die Nachrichten tatsächlich zu verarbeiten. Auf diese Weise geschieht die Erhöhung sehr schnell und es gibt nur einen Thread, der tatsächlich die Warteschlange der Arbeitselemente verarbeitet.

Dies bedeutet jedoch, dass Sie jetzt damit umgehen müssen, dass die Erhöhung Ihres Ereignisses nicht bedeutet, dass es sofort verarbeitet wurde, was sich auf die Logik auswirken könnte, die Sie in Ihrer App haben.

Verwandte Themen