私はリアクティブプログラミングに不慣れで、問題に遭遇しました...
私のコードは次のようになっています。
IsBusy = true;
service.BeginGetClients(param, c =>
{
var r = service.EndGetClients(c);
if(!CheckResult(r))
{
service.BeginGetCachedClients(param, c2 =>
{
var r2 = service.EndGetCachedClients(c2);
if(CheckResult(r2))
ShowMessage("clients valid");
else
ShowMessage("clients not valid");
UpdateClients(r2);
service.BeginUpdateClients(r2, c3 =>
{
var b = service.EndUpdateClients(c3);
if(b)
ShowMessage("clients updated");
else
ShowMessage("clients not updated");
IsBusy = false;
}, null);
}, null);
}
else
{
ShowMessage("error on get clients");
IsBusy = false;
}
}, null);
どうすれば流暢なRxに変更できますか?私はこのコードから始めました:
var invokeClients = Observable.FromAsyncPattern<Param, List<Client>>(service.BeginGetClients, service.EndGetClients);
var invokeCachedClients = Observable.FromAsyncPattern<Param, List<Client>>(service.BeginGetCachedClients, service.EndGetCachedClients);
invokeClients(param)
.Subscribe(r =>
{
if(!CheckResult(r))
{
invokeCachedClients(param)
.Subscribe(r2 =>
{
// TODO: next op
});
}
});
このコードを改善する提案はありますか?多分別の解決策?このカスケードコードは好きではありません...
ありがとう!