En utilisant Rx pour appeler une méthode de service WCF Async est à l'origine des problèmes de fermeture
-
25-09-2019 - |
Question
Je suis actuellement en utilisant ce code tu appeler un webservice pour obtenir des données pour une page d'application. Tout va bien jusqu'à ce que je tente d'appeler cette méthode 10 fois de suite, sans attendre le premier appel à la fin.
Cela me cause d'avoir un problème avec la fermeture et je reçois le même objet de résultat pour tous mes résultats.
quelqu'un a fait face à ce avec Rx.Net avant? si oui que quelqu'un a une idée ou une avance pour que je puisse résoudre ce problème.
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);
}
La solution
est Service
toujours la même instance? Si oui, vous allez courir dans toutes sortes de folie où les événements de GetPageCompleted
seront traitées par le FromEvent
créé par un autre appel (avec des arguments différents), ce qui expliquerait pourquoi vos résultats sont les mêmes pour toutes les méthodes qui ont été appelés à en même temps.
Vous pouvez contourner ce problème spécifique en utilisant les méthodes de début / fin, mais vous aurez toujours probablement un problème avec contention sur la connexion sous-jacente.
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);
}