Observable.Interval Yöntemi (TimeSpan, IScheduler)
Her dönemden sonra bir değer üreten gözlemlenebilir bir dizi döndürür.
Ad Alanı:System.Reactive.Linq
Derleme: System.Reactive (System.Reactive.dll içinde)
Söz dizimi
'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>
Parametreler
- dönem
Tür: System.TimeSpan
Elde edilen dizideki değerlerin üretilmesi için dönem.
- scheduler
Tür: System.Reactive.Concurrency.IScheduler
Zamanlayıcının çalıştırılacak zamanlayıcı.
Dönüş Değeri
Tür: System.IObservable<Int64>
Her dönemden sonra bir değer üreten gözlemlenebilir bir dizi.
Açıklamalar
Interval işleci, uzun tamsayılardan oluşan bir dizi oluşturur. Her tamsayı, period parametresi için sağlanan zaman aralığı sona erdikten sonra oluşturulur. Scheduler parametresi, sağlanan zamanlayıcılardan herhangi birini veya özel bir zamanlayıcıyı kullanarak tamsayıların oluşturulmasını zamanlamak için kullanılabilir. Örneğin NewThreadScheduler , tamsayıların yeni bir iş parçacığında oluşturulmasını yürütmek için kullanılabilir.
Örnekler
Aşağıdaki örnek kod, sıfıra bakan uzun tamsayılar dizisi oluşturmak için Interval işlecini kullanır. Dizideki her tamsayı, iki saniyelik süre dolduktan sonra oluşturulur. Her tamsayı, geçerli saatle birlikte konsol penceresine yazılır ve period parametresini etkin olarak gösterir. Tamsayı dizisinin oluşturulması, .Net iş parçacığı havuzundan bir iş parçacığında çalışacak şekilde zamanlanır, böylece ana iş parçacığı engellenmez ve aralığı durdurmak için basılan enter tuşunu işleyebilir.
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();
}
}
}
}
Aşağıdaki çıkış örnek kod tarafından oluşturulmuştur.
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