Observable.Interval メソッド (TimeSpan、 IScheduler)

各期間の後に値を生成する監視可能なシーケンスを返します。

Namespace:System.Reactive.Linq
アセンブリ: System.Reactive (System.Reactive.dll)

構文

'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>

パラメーター

  • period
    種類: System.TimeSpan
    結果のシーケンス内の値を生成する期間。

戻り値

種類: System.IObservable<Int64>
各期間の後に値を生成する監視可能なシーケンス。

解説

Interval 演算子は、長整数のシーケンスを生成します。 各整数は、 period パラメーターに指定された期間の有効期限が切れた後に生成されます。 scheduler パラメーターを使用すると、指定されたスケジューラまたはカスタム スケジューラのいずれかを使用して、整数の生成をスケジュールできます。 たとえば、 NewThreadScheduler を使用して、新しいスレッドで整数の生成を実行できます。

次のコード例では、Interval 演算子を使用して、0 を見つめる長整数のシーケンスを生成します。 シーケンス内の各整数は、2 番目の期間の有効期限が切れた後に生成されます。 各整数は、有効な period パラメーターを表示するために、現在の時刻と共にコンソール ウィンドウに書き込まれます。 整数シーケンスの生成は、.Net スレッド プールのスレッドで実行されるようにスケジュールされているため、メイン スレッドはブロックされず、押されている 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

参照

リファレンス

Observable クラス

Interval Overload

System.Reactive.Linq 名前空間