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 に答える