Domanda

Attualmente sto usando questo codice tu chiamare un webservice per ottenere i dati per una pagina dell'applicazione. Tutto va bene fino a quando provo a chiamare questo metodo 10 volte di fila senza attendere la prima chiamata alla fine.

In questo modo sta causando me di avere un problema con le chiusure e ottengo lo stesso oggetto risultato per tutti i miei risultati.

qualcuno ha affrontato questo con Rx.Net prima? in tal caso qualcuno ha un'idea o un cavo in modo che io possa risolvere il problema.

    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);
    }
È stato utile?

Soluzione

È sempre Service la stessa istanza? Se è così, si sta andando a correre in tutti i tipi di follia per cui gli eventi GetPageCompleted saranno gestiti dal FromEvent creato da una chiamata diversa (con argomenti diversi), il che spiegherebbe il motivo per cui i risultati sono gli stessi per tutti i metodi che sono stati chiamati a allo stesso tempo.

È possibile aggirare questo problema specifico utilizzando i metodi End Begin /, anche se si ancora probabile incorrere in problemi con contesa sul collegamento sottostante.

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top