Frage

Ich bin derzeit mit diesen Code tu eine Webservice aufrufen, um Daten für eine Anwendung Seite zu bekommen. Alles ist gut, bis ich versuche, diese Methode 10-mal in Folge zu rufen, ohne für den ersten Anruf bis zum Ende zu warten.

Doing so macht mich ein Problem mit Schließungen haben und ich das gleiche Ergebnis Objekt für alle meine Ergebnisse.

hat jemand konfrontiert diese mit Rx.Net vor? wenn ja hat jemand eine Idee oder einen Vorsprung hat, so dass ich dieses Problem beheben kann.

    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);
    }
War es hilfreich?

Lösung

Ist Service immer die gleiche Instanz? Wenn ja, Sie gehen zu laufen in alle Arten von Verrücktheit, wodurch GetPageCompleted Ereignisse werden von den FromEvent durch einen anderen Anruf erstellt behandelt werden (mit unterschiedlichen Argumenten), was erklären würde, warum Ihre Ergebnisse die gleichen für alle Methoden, die bei genannt wurden zur gleichen Zeit.

Sie können dieses spezielle Problem umgehen, indem Sie die Start / End-Methoden, wenn Sie immer noch mit Streit über die zugrundeliegende Verbindung wahrscheinlich in Probleme laufen wird.

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top