如何使用Rx .NET / Dispose的简单超时?

时间:2011-02-24 22:31:40

标签: .net timer system.reactive

使用Rx .NET在3秒后引发火灾并忘记回调的最简单方法是什么。我注意到这个有效,但是我必须处理它还是什么?我不确定。

Observable.Timer(TimeSpan.FromSeconds(3)).Subscribe(x => Console.WriteLine("Fired"));

3 个答案:

答案 0 :(得分:4)

就是这样,如果可以,我会将你的问题标记为答案;)。

关于处置,您通常需要在以下情况下处置订阅:

  • 您订阅的是一个属于容量超过订阅组件的容器的observable。
  • 你需要尽早“取消订阅”。

您的样本不是其中之一,所以不要担心取消订阅。

答案 1 :(得分:0)

仅仅是为了踢,这是另一种使用Rx的替代方案,但是将调度程序放在前面和中心,省略了订阅业务和Action上不必要的参数。和以前一样,您可以使用返回的IDisposable取消操作。:

Scheduler.Default.Schedule(TimeSpan.FromSeconds(3), () => Console.WriteLine("Fired"));

答案 2 :(得分:0)

好奇,但你的问题是'超时',而不是'计时器'。你所拥有的是在给定时间发生的事件,而不是在给定时间之后事件放弃的等待。虽然看起来你对答案很满意,但我想我会检查清楚。

要执行稍后操作,可以将.Timeout(Timespan)添加到可观察序列。正如詹姆斯世界提到的那样,隐含地有一个调度程序在这里发挥作用。当你隐藏Scheduler时,你会发现单元测试很痛苦。理想情况下,您应该将要使用的调度程序提供给您使用的定时器/间隔/超时方法。