Использование RX для вызова метода службы WCF ASYNC вызывает проблемы с закрытием

StackOverflow https://stackoverflow.com/questions/4401566

Вопрос

В настоящее время я использую этот код TU, позвоните веб-сервису, чтобы получить данные для страницы приложения. Все хорошо, пока не стараюсь называть этот метод 10 раз подряд, не дожидаясь первого звонка, чтобы закончить.

Это заставляет меня иметь проблему с закрытиями, и я получаю тот же объект результата для всех моих результатов.

Кто-нибудь столкнулся с этим с Rx.net раньше? Если это так, у кого-нибудь есть идея или лидерство, чтобы я мог решить эту проблему.

    public void GetPage(long pageId, Action<PageDTO> observer)
    {

        Observable.FromEvent<GetPageCompletedEventArgs>(
            handler => Service.GetPageCompleted += handler,
            handler => Service.GetPageCompleted -= handler)
            .Select(eventHandler => eventHandler.EventArgs.Result)
            .Take(1) // necessary to ensure the observable unsubscribes
            .ObserveOnDispatcher() // controls which thread the observer runs on;
            .Subscribe(observer, HandleError);

        Service.GetPageAsync(pageId);
    }
Это было полезно?

Решение

Является Service всегда тот же экземпляр? Если это так, вы собираетесь бежать во все виды сумасшествия, в результате чего GetPageCompleted События будут обрабатываться FromEvent Созданный другим вызовом (с разными аргументами), который объяснил бы, почему ваши результаты одинаковы для всех методов, которые были вызваны одновременно.

Вы можете обойти эту конкретную проблему, используя методы начала / конечного режима, хотя вы все равно, скорее всего, столкнулись с проблемами с сохранением в основе базовой связи.

public void GetPage(long pageId, Action<PageDTO> observer)
{
    Observable.FromAsyncPattern<long, PageDTO>(
            service.BeginGetAwards, service.EndGetAwards)(pageId)
        .ObserveOnDispatcher() // controls which thread the observer runs on;
        .Subscribe(observer, HandleError);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top