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>
參數
- Period
類型: System.TimeSpan
產生結果序列中值的期間。
- scheduler
類型: System.Reactive.Concurrency.IScheduler
要執行計時器的排程器。
傳回值
類型:System.IObservable<Int64>
可觀察的序列,會在每個期間之後產生值。
備註
Interval 運算子會產生長整數序列。 每個整數都會在為 period 參數提供的時間範圍到期之後產生。 排程器參數可用來使用任何提供的排程器或自訂排程器來排程整數的產生。 例如, NewThreadScheduler 可用來在新執行緒上執行整數的產生。
範例
下列範例程式碼會使用 Interval 運算子來產生以零為星號的長整數序列。 序列中的每個整數都會在兩秒期間到期之後產生。 每個整數都會連同目前時間一起寫入主控台視窗,以顯示有效期間參數。 整數序列的產生會排程在 .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