Как преобразовать метод, который принимает OnError и OnCompleted в Observable - PullRequest
0 голосов
/ 04 июня 2010

Вероятно, есть очень простой ответ на этот вопрос, но мой мозг просто не работает.

У меня есть метод, который мне нужно вызвать в каркасе, который не знает Observable и имеет следующий шаблон:

client.GetAsync<TResult>(
     string resource, 
     Action<Exception> onError, 
     Action<TResult> onCompleted);

Мне нужно преобразовать это в синхронное действие, которое ждет результата. Я подумал, что Rx поможет мне, поэтому я попытался

var observable = Observable.Create<XElement>(
    observer => () => client.GetAsync<XElement>(
        "resource1",
        observer.OnError,
        observer.OnNext);
var result = observable.First();

Но это здесь, но это просто тупики, я попытался сделать это ObserveOn новой ветки и SubscribeOn новой ветке. Но это все еще тупики, я даже на правильном пути?

1 Ответ

1 голос
/ 04 июня 2010

Вы на правильном пути, с небольшой регулировкой.

var observable = Observable.Create<XElement>( 
    observer => 
    {
        client.GetAsync<XElement>( 
        "resource1", 
        observer.OnError, 
        x => 
        {
           observer.OnNext(x);
           observer.OnCompleted();
        }); 
        return () => {};
    });

Так же, как комментарий, использование RX для создания синхронных вещей из асинхронных - это своего рода «противоречие». Обычно RX используется, чтобы сделать асинхронный из синхронного или проще асинхронным.

...