Observable.Interval 方法 (TimeSpan、IScheduler)

返回一个可观测序列,该序列在每个周期后生成一个值。

Namespace:System.Reactive.Linq
装配: System.Reactive.dll) 中的 System.Reactive (

语法

'Declaration
Public Shared Function Interval ( _
    period As TimeSpan, _
    scheduler As IScheduler _
) As IObservable(Of Long)
'Usage
Dim period As TimeSpan
Dim scheduler As IScheduler
Dim returnValue As IObservable(Of Long)

returnValue = Observable.Interval(period, _
    scheduler)
public static IObservable<long> Interval(
    TimeSpan period,
    IScheduler scheduler
)
public:
static IObservable<long long>^ Interval(
    TimeSpan period, 
    IScheduler^ scheduler
)
static member Interval : 
        period:TimeSpan * 
        scheduler:IScheduler -> IObservable<int64> 
public static function Interval(
    period : TimeSpan, 
    scheduler : IScheduler
) : IObservable<long>

参数

返回值

类型: System.IObservable<Int64>
在每个周期后生成值的可观察序列。

备注

Interval 运算符生成一个长整数序列。 每个整数在为 period 参数提供的时间跨度到期后生成。 计划程序参数可用于使用提供的任意计划程序或自定义计划程序来计划整数的生成。 例如, NewThreadScheduler 可用于在新线程上执行整数的生成。

示例

下面的示例代码使用 Interval 运算符生成一个以零为星的长整数序列。 序列中的每个整数都是在两个秒期限到期后生成的。 每个整数都会随当前时间一起写入控制台窗口,以显示有效 period 参数。 整数序列的生成计划为在 .Net 线程池中的线程上运行,因此不会阻止main线程,并且可以处理按下的 Enter 键以停止间隔。

using System;
using System.Reactive.Linq;
using System.Reactive.Concurrency;

namespace Example
{
  class Program
  {
    static void Main()
    {
      //*********************************************************************************************//
      //*** Generate a sequence of integers starting at zero until ENTER is pressed.              ***//
      //***                                                                                       ***//
      //*** A new integer will be generated by the Interval operator after each 2 second period   ***//
      //*** expires.                                                                              ***//
      //***                                                                                       ***//
      //*** By using the ThreadPool scheduler, the sequence of integers will be generated by a    ***//
      //*** thread in the .NET thread so the main thread is not blocked.                          ***//
      //*********************************************************************************************//

      const int periodInSec = 2;
      var obs = Observable.Interval(TimeSpan.FromSeconds(periodInSec),
                                    Scheduler.ThreadPool);


      //*********************************************************************************************//
      //*** Write each value from Interval to the console window along with the current time to   ***//
      //*** show the period time span in effect.                                                  ***//
      //*********************************************************************************************//

      using (IDisposable handle = obs.Subscribe(x => Console.WriteLine("Integer : {0}\tCurrent Time : {1}", x, DateTime.Now.ToLongTimeString())))
      {
        Console.WriteLine("Press ENTER to exit...\n");
        Console.ReadLine();
      }
    }
  }
}

示例代码生成了以下输出。

Press ENTER to exit...

Integer : 0     Current Time : 5:11:55 PM
Integer : 1     Current Time : 5:11:57 PM
Integer : 2     Current Time : 5:11:59 PM
Integer : 3     Current Time : 5:12:01 PM
Integer : 4     Current Time : 5:12:03 PM
Integer : 5     Current Time : 5:12:05 PM
Integer : 6     Current Time : 5:12:07 PM
Integer : 7     Current Time : 5:12:09 PM
Integer : 8     Current Time : 5:12:11 PM
Integer : 9     Current Time : 5:12:13 PM
Integer : 10    Current Time : 5:12:15 PM
Integer : 11    Current Time : 5:12:17 PM
Integer : 12    Current Time : 5:12:19 PM
Integer : 13    Current Time : 5:12:21 PM

另请参阅

参考

可观测类

间隔重载

System.Reactive.Linq 命名空间