首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棱镜EventAggregator缓冲

棱镜EventAggregator缓冲
EN

Stack Overflow用户
提问于 2017-04-07 12:07:28
回答 2查看 1K关注 0票数 1

问题很简单,真的。EventAggregator缓冲区事件吗?例:一个单一的订户在收听两个不同的事件,一个去和一个不去.每个事件都需要一些工作、数据库更新、通知UI等等。可能有多达64个发布者。出版商的工作几乎是实时的,所以不管是去还是不去,GOs可能很快就会来。事件聚合器也可以对这些数据进行缓冲,以便订阅者能够以串行方式处理它们。

谢谢,道格

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 12:31:24

默认情况下,订阅操作在事件发布的同一线程上执行。这意味着,在订阅服务器处理上一个事件之前,发布者将无法发布另一个事件。因此,在默认情况下,事件实际上是以串行方式处理的。

您可以通过在订阅时指定一个ThreadOption来更改这一点:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2017-04-07 14:55:41

您可以使用来自EventLoopScheduler反应性扩展来按原始顺序处理事件。EventLoopScheduler将在单个后台线程中处理事件发布。调用"Schedule“方法后,它不会停止发行者的线程

代码语言:javascript
复制
EventLoopScheduler eventLoopScheduler = new EventLoopScheduler();

eventAggregator.GetEvent<YourEventType>().Subscribe(s =>
{
    eventLoopScheduler.Schedule(() =>
    {
        //handler
    });
});

至于我,我使用来自ReactiveUI的ReactiveUI而不是EventAggregator,因为它可以使用IScheduler作为参数,并且可以在取消订阅之后记住最后的事件有效负载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43277737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档