Observable.Window<TSource> メソッド (IObservable<TSource>、TimeSpan、TimeSpan、IScheduler)
監視可能なシーケンスの各要素を、タイミング情報に基づいて生成される 0 個以上のウィンドウに投影します。
Namespace:System.Reactive.Linq
アセンブリ: System.Reactive (System.Reactive.dll)
構文
'Declaration
<ExtensionAttribute> _
Public Shared Function Window(Of TSource) ( _
source As IObservable(Of TSource), _
timeSpan As TimeSpan, _
timeShift As TimeSpan, _
scheduler As IScheduler _
) As IObservable(Of IObservable(Of TSource))
'Usage
Dim source As IObservable(Of TSource)
Dim timeSpan As TimeSpan
Dim timeShift As TimeSpan
Dim scheduler As IScheduler
Dim returnValue As IObservable(Of IObservable(Of TSource))
returnValue = source.Window(timeSpan, _
timeShift, scheduler)
public static IObservable<IObservable<TSource>> Window<TSource>(
this IObservable<TSource> source,
TimeSpan timeSpan,
TimeSpan timeShift,
IScheduler scheduler
)
[ExtensionAttribute]
public:
generic<typename TSource>
static IObservable<IObservable<TSource>^>^ Window(
IObservable<TSource>^ source,
TimeSpan timeSpan,
TimeSpan timeShift,
IScheduler^ scheduler
)
static member Window :
source:IObservable<'TSource> *
timeSpan:TimeSpan *
timeShift:TimeSpan *
scheduler:IScheduler -> IObservable<IObservable<'TSource>>
JScript does not support generic types and methods.
型パラメーター
- TSource
ソースの種類。
パラメーター
- source
種類: System.IObservable<TSource>
ウィンドウを生成するソース シーケンス。
- timeSpan
種類: System.TimeSpan
各ウィンドウの長さ。
- タイムシフト
種類: System.TimeSpan
連続するウィンドウの作成間隔。
- scheduler
型: System.Reactive.Concurrency.IScheduler
ウィンドウ タイマーを実行するスケジューラ。
戻り値
種類: System.IObservable<IObservable<TSource>>
ウィンドウの監視可能なシーケンス。
使用上の注意
Visual Basic と C# では、 IObservable<TSource> 型の任意のオブジェクトのインスタンス メソッドとしてこのメソッドを呼び出すことができます。 インスタンス メソッド構文を使用してこのメソッドを呼び出す場合は、最初のパラメーターを省略します。 詳細については、」または」を参照してください。
解説
Window 演算子は、ソース シーケンスを、シーケンスのウィンドウ ビューのようなバッファーされたサブセットに分割します。 timeSpan パラメーターは、その期間、ウィンドウを開いたままにすることで、各ウィンドウ バッファーに配置される項目の数を制御します。 timeShift パラメーターは、前のウィンドウの先頭からの期間を示します。これは、新しいウィンドウが開く前に完了する必要があります。 これにより、その期間の期間に基づいてビューがシーケンスにシフトされます。 スケジューラ パラメーターは、timeSpan パラメーターと timeShift パラメーターに関連付けられているタイマーを実行する場所を制御します。
例
この例では、Window 演算子を使用して、Interval 演算子から 1 秒おきに整数シーケンスを観察します。 各整数シーケンスは、ウィンドウを介して表示されます。 各ウィンドウは 2.5 秒間開き、閉じられます。 timeShift パラメーターは 5 秒に設定されます。 つまり、前のウィンドウが開かれた時刻から 5 秒ごとに新しいウィンドウが開きます。 最終的な結果として、ウィンドウが 2.5 秒間開き、2.5 秒間閉じられます。 したがって、シーケンスには、0 で始まる 5 番目の整数ごとに 2 つの整数が含まれます。
using System;
using System.Reactive.Linq;
using System.Reactive.Concurrency;
namespace Example
{
class Program
{
static void Main()
{
//**********************************************************************************************//
//*** The mainSequence produces a new long integer from the Interval operator every sec but ***//
//*** this sequence is broken up by the Window operator into subsets like a windowed ***//
//*** view of the sequence. ***//
//*** ***//
//*** The timeSpan parameter controls how many items are placed in each window buffer by ***//
//*** keeping the window open for the duration of the time span. ***//
//*** ***//
//*** The timeShift parameter indicates the time span which must complete before a new ***//
//*** window opens. This shifts the view into the sequence based on the duration of the time ***//
//*** span. ***//
//*** ***//
//*** The ThreadPool scheduler is used to run the timers on a .NET thread pool thread. This ***//
//*** prevents the main thread from being blocked so pressing enter can exit the example. ***//
//*** ***//
//*** In this example each window will be open for 2.5 seconds. This will allow each window ***//
//*** to hold some items from the sequence starting with the first item (0). Then the ***//
//*** timeShift parameter shifts the next window opening by 5 seconds from the beginning of ***//
//*** the previous window. The result is that a window is open for 2.5 seconds then closed ***//
//*** for 2.5 seconds. ***//
//**********************************************************************************************//
var mainSequence = Observable.Interval(TimeSpan.FromSeconds(1));
TimeSpan timeSpan = TimeSpan.FromSeconds(2.5);
TimeSpan timeShift = TimeSpan.FromSeconds(5);
var seqWindowed = mainSequence.Window(timeSpan, timeShift, Scheduler.ThreadPool);
//*********************************************************************************************//
//*** A subscription to seqWindowed will provide a new IObservable<long> for some items in ***//
//*** the main sequence starting with the first item. Then we will receive a new observable ***//
//*** for every window. ***//
//*** ***//
//*** Create a subscription to each window into the main sequence and list the values. ***//
//*********************************************************************************************//
Console.WriteLine("Creating the subscription. Press ENTER to exit...\n");
seqWindowed.Subscribe(seqWindow =>
{
Console.WriteLine("\nA new window into the main sequence has been opened\n");
seqWindow.Subscribe(x =>
{
Console.WriteLine("Integer : {0}", x);
});
});
Console.ReadLine();
}
}
}
次の出力は、コード例によって生成されました。
Creating the subscription. Press ENTER to exit...
A new window into the main sequence has been opened
Integer : 0
Integer : 1
A new window into the main sequence has been opened
Integer : 5
Integer : 6
A new window into the main sequence has been opened
Integer : 10
Integer : 11
A new window into the main sequence has been opened
Integer : 15
Integer : 16
A new window into the main sequence has been opened
Integer : 20
Integer : 21