다음을 통해 공유


Observable.Interval 메서드(TimeSpan, IScheduler)

각 마침표 이후의 값을 생성하는 관찰 가능한 시퀀스를 반환합니다.

네임스페이스: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 연산자는 긴 정수 시퀀스를 생성합니다. 각 정수는 기간 매개 변수에 대해 제공된 시간 범위가 만료된 후에 생성됩니다. scheduler 매개 변수를 사용하여 제공된 스케줄러 또는 사용자 지정 스케줄러를 사용하여 정수 생성을 예약할 수 있습니다. 예를 들어 NewThreadScheduler 를 사용하여 새 스레드에서 정수 생성을 실행할 수 있습니다.

예제

다음 예제 코드에서는 Interval 연산자를 사용하여 0을 응시하는 긴 정수 시퀀스를 생성합니다. 시퀀스의 각 정수는 두 번째 기간이 만료된 후에 생성됩니다. 각 정수는 현재 시간과 함께 콘솔 창에 기록되어 마침표 매개 변수가 적용됩니다. 정수 시퀀스의 생성은 .Net 스레드 풀의 스레드에서 실행되도록 예약되므로 기본 스레드가 차단되지 않고 누를 입력 키를 처리하여 간격을 중지할 수 있습니다.

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 네임스페이스