Ich verwende eine Netzwerk-API, die mit Rückrufen funktioniert. Also im Grunde, ich habe ein paar Methodenaufrufe, dass ich in diesem 3rd-Party-Bibliothek verwenden müssen, die wie folgt aussehen:Wie wickeln Sie Async-Callback mit Observable oder Async/warten?
void SendNetworkRequest(string requestType, Action<Response> callback)
ich den Code finden ein wenig verrückt bekommen, weil alle meine Methoden, die auf Netzwerk abhängen Ressourcen von dieser 3rd Party API müssen auch Callbacks selbst implementieren. Zum Beispiel habe ich kann in meiner Haupt-Szene will die Spieler Informationen und mein Code bekommen würde wie folgt aussehen:
void InitMainScene()
{
_networkHelper.SendNetworkRequest("GetPlayersInfo",OnPlayerInfoResponse);
}
void OnPlayerInfoResponse(Response response)
{
_playerInfo = response.Info;
}
Ich habe vor kurzem in RX bekommen und bin mit ihm abundently in meinem Code. Ich habe gelesen, lesen Sie etwas über async/erwarten. Ich habe viel experimentiert, vor allem mit RX, und habe versucht, mit Observable.FromAsync() zu arbeiten, konnte es aber nicht zum Laufen bringen.
Was fehlt mir hier? Wie kann ich Code schreiben, der sauberer ist und den Rückruf nicht benötigt, der RX oder async verwendet/wartet? Das folgende ist der pseudedocode, den ich suche:
void InitMainScene()
{
_playerInfo = Overservable.DoMagicThing<Response>(() => {
_networkHelper.SendNetworkRequest("GetPlayersInfo",(r) =>{return r;}); });
}
Ihnen so vielen Dank! das ist toll! Ich werde heute damit spielen. Frage an dich - empfiehlst du diese Semantik in meinem Fall über die Overspervable?BTW - Ich habe noch nicht async/await verwendet, und tatsächlich mache ich das in Unity3d, das nur .NET 4.6 als experimentelles Feature unterstützt. – user3010678
RX ist großartig, wenn Sie einen Strom von Ereignissen verarbeiten. In Ihrem Fall rufen Sie SendNetworkRequest auf und warten dann, bis die Aufgabe abgeschlossen ist. Also ja, async/wait ist in diesem Fall einfacher und vernünftiger als Rx. Sauber und einfacher –