Vì vậy, tôi đang đọc trên Rx và gặp khó khăn trong thời gian rãnh. Tôi có một ứng dụng Silverlight cần thực hiện 6 cuộc gọi đến một dịch vụ cụ thể một cách không đồng bộ. Trong những ngày cũ, chúng tôi sẽ xử lý điều này bằng cách thực hiện cuộc gọi và truy vấn userState/token để khớp với phản hồi với yêu cầu vì chúng không được đảm bảo trả lại theo thứ tự mà chúng tôi đã gọi. Tuy nhiên, tôi nghi ngờ Rx xử lý điều này một cách thanh lịch hơn rất nhiều. Nhưng tôi không thể làm cho nó hoạt động được. Dưới đây là những gì tôi có cho đến nay ...Quản lý các cuộc gọi dịch vụ không đồng bộ bằng Silverlight và Tiện ích mở rộng phản ứng
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);
}
Tôi hy vọng bạn có thể thấy những gì tôi đang cố gắng để đạt được ở đây ...
Những gì tôi kết thúc với là tất cả của con người myObject 's được đặt thành kết quả của cuộc gọi đầu tiên trả về.
Tôi chắc chắn đó là điều gì đó ngớ ngẩn nhưng tôi chưa thể tìm ra.
Cảm ơn :)
Thankyou! Điều này hoạt động và sẽ rất tốt để khởi động :-) Tôi tự hỏi, để soái kết quả trở lại thread UI, tôi không thể chỉ cần thay đổi dòng cuối cùng để requestResult.ObserveOn (SynchronizationContext.Current) .Subscribe (...) ? – Senkwe
Có trên ObserveOn. Ngoài ra, nếu bạn thêm một tham chiếu đến thư viện System.Reactive.????Thông thống thư viện thích hợp, bạn có thể sử dụng requestResult.ObserveOnDispatcher() Đăng ký (...) –
Câu trả lời hay - như Jim gián tiếp hiển thị bằng cú pháp truy vấn, khóa để phát hành các yêu cầu đang sử dụng SelectMany –