Pergunta

Atualmente, estou usando este código TU Ligue para um Serviço da Web para obter dados para uma página de aplicativo. Tudo está bem até eu tentar chamar esse método 10 vezes seguidas sem esperar a primeira chamada para terminar.

Fazer isso está me fazendo ter um problema com o fechamento e recebo o mesmo objeto de resultado para todos os meus resultados.

Alguém já enfrentou isso com o RX.NET antes? Nesse caso, alguém tem uma ideia ou lead para que eu possa resolver esse 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);
    }
Foi útil?

Solução

É Service Sempre a mesma instância? Nesse caso, você vai encontrar todos os tipos de loucura em que GetPageCompleted Os eventos serão tratados pelo FromEvent Criado por uma chamada diferente (com argumentos diferentes), o que explicaria por que seus resultados são os mesmos para todos os métodos que foram chamados ao mesmo tempo.

Você pode contornar esse problema específico usando os métodos iniciantes/finais, embora você ainda provavelmente tenha problemas com a contenção na conexão subjacente.

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top