我已经工作StreamInsight
了几个星期了,通常让它做我想做的事,但有一个例外。我不能让多个查询在同一个进程中运行。例如,假设eventStream
是IQStreamable<eventClass>
:
var query1 = from e in eventStream
where e.EventCode == "33"
select e;
var query2 = from e in eventStream
where e.EventCode == "1"
select e;
var query1Observable = from e in query1.ToPointObservable()
where e.EventKind == EventKind.Insert
select e.Payload.EventCode + ": " + e.Payload.EventDescription;
var query2Observable = from e in query2.ToPointObservable()
where e.EventKind == EventKind.Insert
select e.Payload.EventCode + ": " + e.Payload.EventDescription;
var query1Observer = myApp.DefineObserver(() => Observer.Create<string>(Console.WriteLine));
var query2Observer = myApp.DefineObserver(() => Observer.Create<string>(Console.WriteLine));
var binding = query1Observable.Bind(query1Observer).With(query2Observable.Bind(query2Observer));
using (binding.Run())
{
System.Console.WriteLine("Press enter to stop at any time.");
System.Console.ReadLine();
}
当它运行时,只有大约一半的 query1 事件被发送到query1Observer
,并且只有大约一半的 query2 事件被发送到query2Observer
。其他人就这样消失了。如果我只是做我的绑定
query1Observable.Bind(query1Observer)
然后将所有查询的结果通知给观察者——但当然只针对 query1。如何运行 2 个查询,通知同一进程中的不同观察者?