【问题标题】:How to convert a method that takes an OnError and OnCompleted into an Observable如何将接受 OnError 和 OnCompleted 的方法转换为 Observable
【发布时间】:2010-06-05 01:14:46
【问题描述】:

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

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

【问题讨论】:

    标签: c# system.reactive


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。 Rx 使异步对我来说更容易......通过从异步源同步获取结果。这用于实现同步合约,因此我的选择在这里受到限制。
    猜你喜欢
    • 2016-05-13
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多