2010-06-04 47 views
0

對此,可能有一個非常簡單的答案,但我的大腦無法正常工作。如何將需要OnError和OnCompleted的方法轉換爲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

你在正確的軌道上,有一個小的調整:

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

正如一個評論,使用RX從異步使同步的東西是有點「違背了糧食」。通常,RX用於使異步異步或使異步更容易。

+0

Thx。通過從異步源同步獲取結果,Rx使我更容易異步...這是用來實現同步合同,所以我的選擇在這裏是有限的。 – 2010-06-06 02:39:56

相關問題