在Reactive Extensions中实现基于硬件计时器的自定义调度程序

时间:2012-12-06 09:32:43

标签: system.reactive

是否可以为响应式扩展实现基于自定义硬件定时器的调度程序?我怎么能开始,有什么好的例子吗?

我有一个可以每毫秒向我发送准确中断的硬件。我想利用它来创建更精确的RX调度程序。

更新

感谢Asti回答的关键字,我发现了blog post,这让我发现我可以实现VirtualTimeScheduler<TAbsolute, TRelative>,因为我的硬件设备为我提供了绝对的时间戳。

1 个答案:

答案 0 :(得分:5)

我不确定它会如何准确地完成(在GC系统中很难做出截止日期保证),但这就是我可以开始的方式。

  • 首先实施IScheduler界面。

  • 在内部,使用System.Reactive.Concurrency.SchedulerQueue<TAbsolute>类来维护预定项目的优先级队列。 TAbsolute是每个预定项目的绝对到期时间的类型,因此如果您选择最接近硬件提供的数字类型,则可能更容易。

  • 通过对项目使用优先级排队,您只需评估队列中的第一项是否到期。您可以缓存下一个到期时间并在每次中断时进行比较。

  • 此外,请实施ISchedulerPeriodic界面,以便针对重复计划进行更优化。

祝你好运!