0

对此可能有一个非常简单的答案,但我的大脑无法正常工作。

我有一个方法需要在一个不支持 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 新线程。但它仍然陷入僵局,我是否走在正确的轨道上?

4

1 回答 1

1

您在正确的轨道上,稍作调整。:

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

就像评论一样,使用 RX 从异步中制作同步的东西有点“违背常规”。通常,RX 用于使异步从同步或使异步更容易。

于 2010-06-04T16:52:34.420 回答