Использование RX для вызова метода службы WCF ASYNC вызывает проблемы с закрытием
-
25-09-2019 - |
Вопрос
В настоящее время я использую этот код 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);
}