我试图理解何时以及为什么使用通知类。我看到它与ToNotifier和FromNotifier有关,但不完全确定它们的用途。
是为了在一个可观察序列和观察者之间创建一个像绑定这样的双向方式,这样观察者就可以通过通知将更改推送回原始的可观察对象,还是?
谢谢,埃吉尔。
我个人使用Notification<T>
的唯一一次是当我不得不在多个合并流之间做一些奇怪的错误捕获时…以下是我所做的一个精简的半不现实的例子:
public class ImportantException : Exception {}
var src1 = new Subject<int>();
var src2 = new Subject<int>();
var wrapped = Observable.Merge(src1.Materialize(), src2.Materialize());
var query =
from note in wrapped
let fail = note.Kind == NotificationKind.OnError
let ignorable = fail && !(note.Exception is ImportantException)
where !fail || !ignorable
select note;
using(query.Subscribe(Console.WriteLine))
{
src1.OnNext(1);
src2.OnNext(1);
src1.OnError(new Exception());
src2.OnError(new ImportantException());
}
所以基本上,我只希望从多个(在我的情况下,几十个)合并流中漏出某些类型的错误给订阅者。下面是上面这个不切实际的例子的输出:
OnNextNotification<int> { Value = 1 }
OnNextNotification<int> { Value = 1 }
OnErrorNotification<int> { Exception = (ImportantException) }
Catch
结构,但我发现以这种形式阅读更容易)
我在这里写了一些关于Materialize和Notification的内容:
http://www.zerobugbuild.com/?p=47也用在这里:
http://social.msdn.microsoft.com/forums/en us/rx/thread/bbcc1af9 - 64 - b4 - 456 - b - 9038 - a540cb5f5de5
我最近开始使用它,同时试图在我的应用程序的服务单元测试Rx查询。我现在能够将TestScheduler
传递给正在测试的服务调用,让Rx查询在TestScheduler
上生成事件,然后可以将其作为Notification<>
实例的集合访问单元测试以进行检查。您可以在本文的测试Rx查询小节中看到这种方法。