Это из Джесси и моей следующей книги , но вот, пожалуйста, это халява:
public Func<T1, IObservable<TRet>> FromCallbackPattern<T1, TRet>(Action<T1, Action<TRet>> originalMethod)
{
return new Func<T1, IObservable<TRet>>((param1) => {
var subject = new AsyncSubject<TRet>();
try {
return originalMethod(param1, (result) => {
subject.OnNext(result);
subject.OnCompleted();
});
} catch (Exception ex) {
subject.OnError(ex);
}
return subject;
});
}
Вот как вы ее используете:
// Here's a sample method that follows the callback pattern
public void DownloadPageTextAsync(string url, Action<string> callback);
var dlPageRx = FromCallbackPattern(DownloadPageTextAsync);
dlPageRx("http://www.jesseliberty.com")
.Subscribe(pageText => Console.WriteLine(pageText));