Von einer Client-Anwendung sende ich eine Anfrage/Transaktion (enthält eine Operation (und Parameter) + transactionID) zu einer fernen Warteschlange. Der Remote-Server entfernt die Anfrage zu einem bestimmten Zeitpunkt und benötigt etwas Zeit, um sie zu verarbeiten.Benötigen Sie ein besseres Design für eine "Callback Dispatcher" -Komponente
Sobald es fertig ist, verarbeitet es, sendet es eine Antwort auf die Client-Warteschlange (enthält die applicative Antwort + die transactionID) ... so ist dies eine völlig "getrennte" Kommunikationsmodus, die einzige Möglichkeit, die der Client zuordnen kann Die Antwort auf die Anfrage erfolgt über die Transaktions-ID.
Die Nachrichtenantwort wird auf der Clientseite entfernt und mit der ursprünglichen Anfrage abgeglichen (basierend auf der transactionID).
Was ich gerade mache ist, dass, wenn der Client die Anfrage an die Server-Warteschlange posten, fügt er einen Rückruf zu einem Wörterbuch hinzufügen TransaktionsID und Callback (Delegat). Dies ist eine Dictionary<int, object>
Zuordnung einer transactionId zurück zu einem Rückruf mit dem Ergebnis der Operation aufrufen.
die Rückrufe/Teilnehmer als Objekt gespeichert sind, aufgrund der Tatsache, dass in Abhängigkeit von der Anforderung, die Rückruf delegieren Signatur unterscheidet (beispielsweise eine Antwort kann eine List<string>
zurückzukehren, während eine andere Reaktion eine int
zurückkehren kann).
Wenn die Clientwarteschlange eine Antwort aus der Warteschlange nimmt, kennt sie den Typ der Antwort (und damit die entsprechende Signatur des Rückrufs). Daher ruft sie den Rückruf aus dem Wörterbuch ab, basierend auf der transactionID. Anschließend wird das Objekt an den entsprechenden Delegattyp zurückgegeben und der Rückruf aufgerufen.
Ich finde diesen Ansatz nicht sehr "sexy", aber ich sehe keine andere Möglichkeit, eine solche Aufgabe zu erfüllen.
Gibt es eine bessere Möglichkeit, dies durchzuführen?
Wenn das Problem nicht klar genug ist, lass es mich wissen und werde mit einigen Änderungen klären.
mögliches Duplikat von [C#: Verwendet Random und OrderBy einen guten Shuffle-Algorithmus?] (Http://stackoverflow.com/questions/1287567/c-is-using-random-and-orderby-a-good-shuffle -Algorithmus) – Arion