2010-06-04 3 views
0

Il ya probablement une réponse vraiment facile à cela mais mon cerveau ne fonctionne tout simplement pas.Comment faire pour convertir une méthode qui prend un OnError et OnCompleted dans un Observable

J'ai une méthode que j'ai besoin d'appeler dans un cadre qui n'est pas conscient, qui a le modèle suivant. J'ai besoin de convertir cela en une action synchrone qui attend le résultat. Je figurés Rx me aiderait donc j'ai essayé

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

Mais ici, mais ce juste interblocages j'essayé de faire ce ObserveOn nouveau thread et nouveau thread SubscribeOn. Mais il reste encore des deadlocks, suis-je même sur la bonne voie?

Répondre

1

Vous êtes sur la bonne voie, avec un petit ajustement .:

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

Tout comme un commentaire, en utilisant RX pour faire des choses synchrone à partir asynchrone est un peu « va à l'encontre du grain ». Normalement, RX est utilisé pour rendre asynchrone de synchrone ou rendre asynchrone plus facile.

+0

Thx. Rx rend plus asynchrone pour moi ... en obtenant un résultat synchrone à partir d'une source asynchrone. Ceci est utilisé pour implémenter un contrat synchrone donc mes choix sont limités ici. –

Questions connexes