是否可以为响应式扩展实现基于自定义硬件定时器的调度程序?我怎么能开始,有什么好的例子吗?
我有一个可以每毫秒向我发送准确中断的硬件。我想利用它来创建更精确的RX调度程序。
更新
感谢Asti回答的关键字,我发现了blog post,这让我发现我可以实现VirtualTimeScheduler<TAbsolute, TRelative>,因为我的硬件设备为我提供了绝对的时间戳。
答案 0 :(得分:5)
我不确定它会如何准确地完成(在GC系统中很难做出截止日期保证),但这就是我可以开始的方式。
首先实施IScheduler
界面。
在内部,使用System.Reactive.Concurrency.SchedulerQueue<TAbsolute>
类来维护预定项目的优先级队列。 TAbsolute
是每个预定项目的绝对到期时间的类型,因此如果您选择最接近硬件提供的数字类型,则可能更容易。
通过对项目使用优先级排队,您只需评估队列中的第一项是否到期。您可以缓存下一个到期时间并在每次中断时进行比较。
此外,请实施ISchedulerPeriodic
界面,以便针对重复计划进行更优化。