static IObservable <TResult> Process <TSource, TResult>( IObservable <TSource> source, ObjectOperations op, object processorClass) { return(Observable.Defer(() => { var processor = new PythonProcessor <TSource, PythonGenerator>(op, processorClass); var result = source.SelectMany(input => processor.Process(input).Cast <TResult>()); if (processor.Load != null) { processor.Load(); } if (processor.Unload != null) { return result.Finally(processor.Unload); } else { return result; } })); }
static IObservable <TResult> Process <TSource, TResult>( IObservable <TSource> source, ScriptScope scope) { var processor = new PythonProcessor <TSource, PythonGenerator>(scope); var result = source.SelectMany(input => processor.Process(input).Cast <TResult>()); if (processor.Unload != null) { result = result.Finally(processor.Unload); } if (processor.Load != null) { var observable = result; result = Observable.Defer(() => { processor.Load(); return(observable); }); } return(result); }