私はRxを読んでいると思います。特定のサービスを非同期に6回呼び出す必要があるSilverlightアプリケーションがあります。昔は、呼び出しを行い、userState/tokenを照会することで、要求との応答が一致するようにしました。これらの呼び出しは、呼び出された順に返されることは保証されていないからです。しかし、私はRxがはるかにエレガントな方法でこれを処理すると思われます。しかし、私はそれを働かせることはできません。私がこれまで持っているものここで私はあなたが私がここで達成しようとしているかを見ることができると思いSilverlightとReactive Extensionsを使用した非同期サービスコールの管理
myCollection.Add(new myObject(1));
myCollection.Add(new myObject(2));
myCollection.Add(new myObject(3));
myCollection.Add(new myObject(4));
myCollection.Add(new myObject(5));
myCollection.Add(new myObject(6));
foreach (var myItem in myCollection)
{
var myObservable = Observable.FromEventPattern<MyServiceMethodCompletedEventArgs>
(
f => myServiceClient.MyServiceMethodCompleted += f,
f => myServiceClient.MyServiceMethodCompleted -= f
).Take(1).ObserveOn(SynchronizationContext.Current);
myObservable.Subscribe
(
s =>
{
if (s.EventArgs.Error == null)
{
myItem.MyProperty = s.EventArgs.Result;
}
}
);
myServiceClient.MyServiceMethodAsync(myItem);
}
...
私はで終わる何myObjectというの存在のすべてです...です返される最初の呼び出しの結果に設定されます。
私はそれが愚かなものだと確信していますが、私はまだそれを理解することができませんでした。
感謝:)
ありがとうございました!これはうまく動作し、起動するために素晴らしいです:-)私はUIスレッドに結果をマーシャリングするために、最後の行をrequestResult.ObserveOn(SynchronizationContext.Current)に変更することはできません.Subscribe(...) ? – Senkwe
ObserveOnではYesです。また、適切なSystem.Reactive.???.Threadingライブラリへの参照を追加すると、requestResult.ObserveOnDispatcher()を使用することができます。Subscribe(...) –
大きな回答 - Jimが間接的にクエリ構文を使用するため、キーSelectManyを使用してリクエストを発行する –