Управление вызовами асинхронных сервисов с помощью Silverlight и Reactive Extensions

Итак, я читаю о Rx и с трудом могу это понять. У меня есть приложение Silverlight, которое должно выполнять, скажем, 6 асинхронных вызовов определенной службы. Раньше мы справлялись с этим, выполняя вызовы и запрашивая userState / token, чтобы сопоставить ответ с запросом, поскольку они не гарантируют возврат в том порядке, в котором мы их вызывали. Однако я подозреваю, что Rx справляется с этим гораздо более элегантно. Но я не могу заставить его работать. Вот что у меня есть на данный момент ...

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 к результату первого возвращенного вызова.

Я уверен, что это что-то глупое, но я еще не смог это понять.

Спасибо :)

5
задан Gone Coding 21 July 2011 в 13:25
поделиться