问题很简单,真的。EventAggregator缓冲区事件吗?例:一个单一的订户在收听两个不同的事件,一个去和一个不去.每个事件都需要一些工作、数据库更新、通知UI等等。可能有多达64个发布者。出版商的工作几乎是实时的,所以不管是去还是不去,GOs可能很快就会来。事件聚合器也可以对这些数据进行缓冲,以便订阅者能够以串行方式处理它们。
谢谢,道格
发布于 2017-04-07 12:31:24
默认情况下,订阅操作在事件发布的同一线程上执行。这意味着,在订阅服务器处理上一个事件之前,发布者将无法发布另一个事件。因此,在默认情况下,事件实际上是以串行方式处理的。
您可以通过在订阅时指定一个ThreadOption来更改这一点:
eventAggregator.GetEvent<YourEventType>().Subscribe(s =>
{
//do something that make take a while but don't block the publisher...
System.Threading.Thread.Sleep(5000);
}, ThreadOption.BackgroundThread);发布于 2017-04-07 14:55:41
您可以使用来自EventLoopScheduler的反应性扩展来按原始顺序处理事件。EventLoopScheduler将在单个后台线程中处理事件发布。调用"Schedule“方法后,它不会停止发行者的线程
EventLoopScheduler eventLoopScheduler = new EventLoopScheduler();
eventAggregator.GetEvent<YourEventType>().Subscribe(s =>
{
eventLoopScheduler.Schedule(() =>
{
//handler
});
});至于我,我使用来自ReactiveUI的ReactiveUI而不是EventAggregator,因为它可以使用IScheduler作为参数,并且可以在取消订阅之后记住最后的事件有效负载。
https://stackoverflow.com/questions/43277737
复制相似问题