使用反应扩展每秒按顺序获取下一个事件

2023-12-13

我有以下类型...

public class NewsFeed
{
    public event EventHandler<NewsItemEventArgs> NewItem;

    .....

}

public class NewsItemEventArgs : EventArgs
{
    public NewsItem Item;
    public NewsItemEventArgs(NewsItem newsItem)
    {
        Item = newsItem;
    }
}

public class NewsItem
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
}

NewsFeed 的 NewItem 事件触发带有 NewsItemEventArgs 类型的 eventArgs 的事件。在我的系统中,事件会突发发布,例如在 1 秒的小窗口中发布 10 个新闻项目,然后在 60 秒内不再发布新闻报道。我想用 RX 来平滑这些爆发,这样我的 UI 新闻故事“看起来”就会以更规则的间隔(例如 5 秒)一次到达一个。

我知道我需要创建一个可观察的对象,如下所示

_source = Observable.FromEventPattern<NewsItemEventArgs>(
                        h => _newsFeed.NewItem += h,
                        h => _newsFeed.NewItem -= h);

但我不知道如何转换和订阅可观察到的事件,这样我就可以滴灌事件,而不是像上面描述的那样突发事件。

有任何想法吗?


Zip 可能不是此操作的最佳选择,因为生产者有时可能会很慢,从而导致输出不稳定。

看来是准确的调度与DateTimeOffsetRx 2.0 仍然不可能。TimeSpan不过目前还可以。您可以通过更换来尝试TimeSpan偏移量DateTimeOffset.

综上所述,如果我们能够指定两个连续值之间的最小间隔,我们就可以解决突发问题。

    static IObservable<T> DelayBetweenValues<T>(this IObservable<T> observable, TimeSpan interval, IScheduler scheduler)
    {
        return Observable.Create<T>(observer =>
        {
            var offset = TimeSpan.Zero;
            return observable
                .TimeInterval(scheduler)
                .Subscribe
                (
                    ts =>
                    {
                        if (ts.Interval < interval)
                        {
                            offset = offset.Add(interval);
                            scheduler.Schedule(offset, () => observer.OnNext(ts.Value));
                        }
                        else
                        {
                            offset = TimeSpan.Zero;
                            observer.OnNext(ts.Value);
                        }
                    }
                );
        });
    }

Test:

        Observable.Interval(TimeSpan.FromSeconds(2.5))
                  .Do(_ => Console.WriteLine("Burst"))
                  .SelectMany(i => Enumerable.Range((int)i, 10))
                  .DelayBetweenValues(TimeSpan.FromSeconds(0.2), TaskPoolScheduler.Default)
                  .Subscribe(Console.WriteLine);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用反应扩展每秒按顺序获取下一个事件 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 限制事件和锁定方法

    让我们假设我有这样的东西
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 从 J2SE 应用程序中的 persistence.xml 外部化凭证

    我正在编写一个使用 JPA 进行持久性的 J2SE 应用程序 无企业容器 这是我的persistence xml
  • 如何在 Windows 7 上注册自定义程序来处理 mailto 协议

    好的 这可能是我的系统的问题 但我很难让 Windows 7 将我的自定义 exe 识别为 mailto 协议的默认处理程序 首先 我见过这个 以编程方式向 mailto 协议注册 Windows 程序 接下来 我看到了这些 如何使用 Wi
  • C 语言中的非阻塞 I/O? (视窗)

    我正在尝试在 Windows 终端应用程序上获得非阻塞 I O 仅限 Windows 抱歉 如果我想要一个较短的输入时间 让用户可以按下按钮 但如果他不按下按钮 输入就会停止并且程序会继续执行 该怎么办 例如 一个从 1 计数到用户按下某个
  • MapPageRoute 破坏集成 MVC/WebForms 应用程序中的 ActionLink

    我有一个用 ASP NET 4 0 开发的现有 Web 应用程序 我想向应用程序添加 MVC 功能 因此我按照 Scott Hanselman 的文章将 MVC 集成到应用程序中将 ASP NET MVC 3 集成到现有升级的 ASP NE
  • Jasper Report HTML 项目符号悬挂缩进

    我有一个 Jasper 报告 它使用 HTML 标记来显示 li 标记列表 然而 似乎即使使用最新版本的 Jasper 报告 它仍然无法正确执行悬挂缩进 这就是我要的 TEST TEST TEST TEST TEST TEST TEST T
  • 我们如何创建动态文本视图?

    如何在代码中而不是在 xml 文件中创建文本视图 这是因为我的应用程序中的文本视图数量将根据某个整数发生变化 这是动态创建TextView的代码 LinearLayout layout LinearLayout findViewById R
  • 在网络视图中显示 PDF

    我想在我的应用程序中显示 pdf 文件 我的网络服务为我提供了 pdf 我想将其下载到 SD 卡 然后我想通过 webview 在我的应用程序中显示该 pdf 我也曾因 Android PDF 显示问题而苦苦挣扎了一段时间 我采用了与您提到
  • OWL2 使用一个不同的公理对子类进行建模

    我正在尝试使用 OWL 2 DL 使用 Protege 对一些词汇数据进行建模 我的主类是 Lemma 它有许多公理 使用曼彻斯特语法 Every Lemma hasLanguage some Language Every Lemma ha
  • 在 Node.js 中发送电子邮件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我最近开始编写我的第一个 Node j
  • 如何使用seaborn.objects旋转xticks

    碰巧 有没有办法旋转下图中的 xticks 只是为了让它更具可读性 通常sns xticks 在新的seaborn objects开发中不起作用 这太棒了 tcap assign date time2 tcap date time dt d
  • python 3.5 - django 1.10 - mysqlclient windows 7安装错误

    在 django 中配置 mysql 时 我遇到了非常令人不安的问题 我在 Ubuntu x64 上使用 python 3 5 和 Django 1 10 做到了这一点 但我无法在 Windows 7 上做到这一点 我几乎尝试了一切 我希望
  • goDaddy 网站数据库用户访问被拒绝

    我正在尝试从 godaddy 查看我的网站 域名是在其他地方注册的 托管是来自godaddy 更改 DNS 设置后 我在 godaddy 中创建数据库并导入其中的所有表 之后 我创建了一个用户名并将其授予所有权限 然后 当我尝试连接到数据库
  • WCF 超时错误 - 即使在增加值之后

    我的客户一直抱怨他们收到超时错误 但我没有看到我这边生成的跟踪文件 有人能告诉我如何解决这个问题吗 我已经将 receiveTimeout 增加到 15 分钟 00 15 00 我在 WCF 服务端和客户端都执行了此操作 我的服务不是一个长
  • 与可为空外键的一对一关系

    我想在 EF 中创建一对一关系 其中外键可以为空 因此 可以将其称为 0 1 to 0 1 public class ProductInstance public int Id get set public int SaleId get s
  • 安装plone时不支持的哈希类型

    我尝试安装plone但是当我运行脚本 install sh 时遇到问题 以下是错误详细信息 raise ValueError unsupported hash type s name ValueError unsupported hash
  • 如何用 pandas 为空行着色并导出到 Excel 文件?

    我正在尝试在 Excel 上自动执行一些任务 其中一些包括设置没有任何红色值的单元格 我的 DataFrame 维度中的空单元格 而不是其外部的空单元格 在检查之前的类似答案后 我尝试了以下操作 import pandas as pd Cr
  • 访问动态创建的文本框文本

    我偶然发现了我的 asp net 表单的问题 在我的表单中 最终用户选择要动态创建的多个文本框 这一切都可以与以下代码配合使用 protected void txtAmountSubmit Click object sender Event
  • python ctype 初始化结构体

    我的结构包含所有 unsigned char 元素 typedef struct unsigned char bE unsigned char cH unsigned char cL unsigned char EId1 unsigned
  • 如何创建多个空数据框?

    而不是这样做 a pd DataFrame d pd DataFrame c pd DataFrame d pd DataFrame e pd DataFrame 一次 有没有一种快速方法可以用空数据框初始化所有变量 因为最终我想使用 fo
  • 使用反应扩展每秒按顺序获取下一个事件

    我有以下类型 public class NewsFeed public event EventHandler