我希望能够添加这样的扩展方法:
IObservable<T> AfterSubscriber(this IObservable<T> observable, Action<T> action)
其中:
var subj = new Subject<int>();
subj.
AfterSubscriber(i => Console.WriteLine("Second")).
Subscribe(i => Console.WriteLine("First"));
subj.OnNext(1);
产生输出:
First
Second
有关如何实施上述方法的任何建议?有没有我可以使用的内置方法? (假设:同步/即时订阅)
答案 0 :(得分:4)
这个实现怎么样?
public static IObservable<T> AfterSubscriber<T>(
this IObservable<T> @this, Action<T> after)
{
if (@this == null) throw new ArgumentNullException("@this");
if (after == null) throw new ArgumentNullException("after");
return Observable.Create<T>(o =>
{
return @this.Subscribe(t =>
{
o.OnNext(t);
try
{
after(t);
}
catch (Exception exception)
{
o.OnError(exception);
}
}, o.OnError, o.OnCompleted);
});
}