因此,我正在閱讀Rx並且難以對其進行維護。我有一個Silverlight應用程序需要對異步的特定服務進行6次調用。在過去,我們通過調用和查詢userState/token來匹配響應和請求來處理這個問題,因爲它們不能保證以我們稱之爲的順序返回。不過,我懷疑Rx以更加優雅的方式處理這個問題。但我無法讓它工作。這裏是我迄今爲止...使用Silverlight和反應式擴展管理異步服務調用
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上。另外,如果你添加一個引用到相應的System.Reactive.???.Threading庫,你可以使用requestResult.ObserveOnDispatcher()。訂閱(...) –
好的答案 - 因爲Jim間接顯示使用查詢語法,密鑰發出請求是使用SelectMany –