我正在使用一个与回调函数一起工作的网络API。基本上,我需要在这个第三方库中使用一堆方法调用,看起来像这样:
void SendNetworkRequest(string requestType, Action<Response> callback)
我发现代码变得有点混乱,因为所有依赖于第三方API的网络资源的方法都需要自己实现回调。例如,在我的主场景中,我可能想要获取玩家信息,我的代码看起来会像这样:
void InitMainScene()
{
_networkHelper.SendNetworkRequest("GetPlayersInfo",OnPlayerInfoResponse);
}
void OnPlayerInfoResponse(Response response)
{
_playerInfo = response.Info;
}
我最近开始学习RX,并在我的代码中广泛使用它。我已经阅读了一些有关async/await的知识。我进行了很多实验,特别是与RX一起尝试使用Observable.FromAsync(),但无法使其正常工作。
我错过了什么?如何使用RX或async/await编写更清洁且不需要回调的代码?以下是我要寻找的伪代码:
void InitMainScene()
{
_playerInfo = Overservable.DoMagicThing<Response>( () => {
_networkHelper.SendNetworkRequest("GetPlayersInfo",(r) =>{return r;}); });
}
Disposable.Empty
,那么你可能做错了什么。 - EnigmativityDisposable.Empty
的完美例子。 - ShlomoDisposable.Empty
有点像catch (Exception ex)
- 它是一种反模式。通常很容易只需进行几个.OnNext
调用并返回Disposable.Empty
- 这总是导致同步订阅调用。我认为避免使用Disposable.Empty
是一个好习惯。不过,你说得对,这可能是它存在的完美例子。 - Enigmativitycatch (Exception ex)
这样看待Disposable.Empty
- 它有点像是一种反模式。通常可以很容易地进行一些.OnNext
调用并返回Disposable.Empty
- 这始终会导致同步订阅调用。我认为避免使用Disposable.Empty
是一个好的做法。不过你说得对,这可能正是它存在的完美例子。 - Enigmativity