J'utilise une API réseau qui fonctionne avec les rappels. Donc, fondamentalement, j'ai un tas appels de méthode que je dois utiliser dans cette bibliothèque 3ème partie qui ressemble à ceci:Comment faire pour encapsuler le rappel asynchrone avec Observable ou async/await?
void SendNetworkRequest(string requestType, Action<Response> callback)
Je trouve le code d'obtenir un peu loufoque parce que toutes mes méthodes qui dépendent du réseau Les ressources de cette API tierce doivent également implémenter des rappels eux-mêmes. Par exemple, dans ma scène principale je veux obtenir les informations des joueurs et mon code ressemblerait à quelque chose comme ceci:
void InitMainScene()
{
_networkHelper.SendNetworkRequest("GetPlayersInfo",OnPlayerInfoResponse);
}
void OnPlayerInfoResponse(Response response)
{
_playerInfo = response.Info;
}
J'ai récemment obtenu en RX et je l'utilise abundently dans mon code. J'ai lu en lire un peu sur async/await. J'ai beaucoup expérimenté, surtout avec RX, et j'ai essayé de travailler avec Observable.FromAsync() mais je n'ai pas pu le faire fonctionner.
Qu'est-ce qui me manque ici? Comment est-ce que je peux écrire le code qui est plus propre et n'exige pas le rappel utilisant le RX ou l'async/l'attente? Ce qui suit est le psuedocode que je suis à la recherche:
void InitMainScene()
{
_playerInfo = Overservable.DoMagicThing<Response>(() => {
_networkHelper.SendNetworkRequest("GetPlayersInfo",(r) =>{return r;}); });
}
Merci beaucoup! c'est bien! Je vais jouer avec ça aujourd'hui. Question pour vous - recommandez-vous cette sémantique sur l'Overservable dans mon cas?BTW - Je n'ai pas encore utilisé async/await, et en fait, je le fais dans Unity3d qui ne supporte que .net 4.6 comme fonctionnalité expérimentale. – user3010678
RX est idéal si vous gérez un flux d'événements. Dans votre cas, vous appelez SendNetworkRequest puis attendez que la tâche soit terminée, c'est tout. Donc oui, async/await est plus facile et plus raisonnable que Rx dans ce cas. Propre et facile –