Bu yüzden Rx'i okuyorum ve zor bir zaman geçiriyorum. Belirli bir hizmete eşzamansız olarak 6 çağrı yapması gereken bir Silverlight uygulamasına sahibim. Eski günlerde, çağrıları yaparak ve kullanıcı adı/belirtecini sorgulayarak, istekte bulunma sırasına göre yanıt vermeyi kabul etmediklerinden, istekle yanıtı eşleştirerek halledebiliriz. Ancak, Rx'in bunu daha zarif bir şekilde ele aldığından şüpheleniyorum. Ama işe yaramayacağım. Ben bugüne kadar ne İşte Sana burada elde etmek çalışıyorum görebilirsiniz umutSilverlight ve Reaktif Uzantıları kullanarak async servis çağrılarını yönetme
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);
}
...
Ben ile bitirmek nemyObject 'in varlığının bütün olduğunu ... var geri dönen ilk aramanın sonucuna ayarlayın.
Eminim aptalca bir şey ama bunu henüz çözemedim.
Teşekkür :)
Teşekkür ederim! Bu çalışır ve boot için harika görünüyor :-) merak ediyorum, sonuçları UI iş parçacığına geri marshal için, sadece requestResult.ObserveOn (SynchronizationContext.Current) .Subscribe (...) için son satırı değiştiremezsiniz ? – Senkwe
Evet ObserveOn. Alternatif olarak, uygun System.Reactive.???.Threading kitaplığına bir başvuru eklerseniz, requestResult.ObserveOnDispatcher() öğesini kullanabilirsiniz .. Abone (...) –
Büyük yanıt - Jim dolaylı sorgu sözdizimini kullanarak gösterir, anahtar istekleri vermek için SelectMany kullanıyor –