是否可以为响应式扩展实现自定义的基于硬件计时器的调度程序?我该如何开始,有什么好的例子吗?
我有一个硬件可以每毫秒向我发送一个准确的中断。我想利用它来创建更精确的 RX 调度程序。
更新
感谢 Asti 回答中的关键字,我找到了这篇博文,这让我发现我可以实现VirtualTimeScheduler<TAbsolute, TRelative>,因为我的硬件设备为我提供了绝对时间戳。
是否可以为响应式扩展实现自定义的基于硬件计时器的调度程序?我该如何开始,有什么好的例子吗?
我有一个硬件可以每毫秒向我发送一个准确的中断。我想利用它来创建更精确的 RX 调度程序。
更新
感谢 Asti 回答中的关键字,我找到了这篇博文,这让我发现我可以实现VirtualTimeScheduler<TAbsolute, TRelative>,因为我的硬件设备为我提供了绝对时间戳。
我不确定它会有多准确(在 GC 系统中很难保证最后期限),但我可以从这里开始。
从实现IScheduler
接口开始。
在内部,使用System.Reactive.Concurrency.SchedulerQueue<TAbsolute>
该类来维护计划项目的优先队列。TAbsolute
是每个计划项目的绝对到期时间的类型,因此如果您选择最接近硬件提供的数字类型可能会更容易。
通过对项目使用优先队列,您只需评估队列中的第一个项目是否到期。您可能可以缓存下一个到期时间并在每次中断时进行比较。
此外,实现ISchedulerPeriodic
接口,这允许它针对重复计划进行更优化。
祝你好运!