Observable.Window<TSource, metoda TWindowClosing> (IObservable<TSource>, Func<IObservable<TWindowClosing>>)
Projektuje każdy element obserwowalnej sekwencji w kolejnych oknach nienakładających się.
Przestrzeń nazw:System.Reactive.Linq
Zestawu: System.Reactive (w System.Reactive.dll)
Składnia
'Declaration
<ExtensionAttribute> _
Public Shared Function Window(Of TSource, TWindowClosing) ( _
source As IObservable(Of TSource), _
windowClosingSelector As Func(Of IObservable(Of TWindowClosing)) _
) As IObservable(Of IObservable(Of TSource))
'Usage
Dim source As IObservable(Of TSource)
Dim windowClosingSelector As Func(Of IObservable(Of TWindowClosing))
Dim returnValue As IObservable(Of IObservable(Of TSource))
returnValue = source.Window(windowClosingSelector)
public static IObservable<IObservable<TSource>> Window<TSource, TWindowClosing>(
this IObservable<TSource> source,
Func<IObservable<TWindowClosing>> windowClosingSelector
)
[ExtensionAttribute]
public:
generic<typename TSource, typename TWindowClosing>
static IObservable<IObservable<TSource>^>^ Window(
IObservable<TSource>^ source,
Func<IObservable<TWindowClosing>^>^ windowClosingSelector
)
static member Window :
source:IObservable<'TSource> *
windowClosingSelector:Func<IObservable<'TWindowClosing>> -> IObservable<IObservable<'TSource>>
JScript does not support generic types and methods.
Parametry typu
- Tsource
Typ źródła.
- TWindowClosing
Typ zamknięcia okna.
Parametry
- source
Typ: System.IObservable<TSource>
Sekwencja źródłowa do tworzenia okien.
- windowClosingSelector
Typ: System.Func<IObservable<TWindowClosing>>
Funkcja wywoływana w celu zdefiniowania granic utworzonych okien.
Wartość zwracana
Typ: System.IObservable IObservable<<TSource>>
Obserwowana sekwencja okien.
Uwaga dotycząca użycia
W języku Visual Basic i C# można wywołać tę metodę jako metodę wystąpienia dla dowolnego obiektu typu IObservable<TSource>. Gdy w celu wywołania tej metody jest używana składnia metody wystąpienia, należy pominąć pierwszy parametr. Aby uzyskać więcej informacji, zobacz lub .
Uwagi
Operator Okna dzieli obserwowaną sekwencję na kolejne okna nienakładalne. Koniec bieżącego okna i początek następnego okna jest kontrolowany przez obserwowaną sekwencję, która jest wynikiem funkcji windowClosingSelect , która jest przekazywana jako parametr wejściowy do operatora. Operator może służyć do grupowania zestawu zdarzeń w oknie. Na przykład stany transakcji mogą być obserwowaną sekwencji głównej. Te stany mogą obejmować: przygotowywanie, przygotowanie, aktywne i przerwane/przerwane. Sekwencja główna może obejmować wszystkie te stany, są one wykonywane w tej kolejności. Funkcja windowClosingSelect może zwrócić obserwowaną sekwencję, która generuje tylko wartość w stanach Zatwierdzone lub Przerwanie. Spowoduje to zamknięcie okna reprezentującego zdarzenia transakcji dla określonej transakcji.
Przykłady
Poniższy prosty przykład dzieli sekwencję liczb całkowitych na kolejne okna nienakładające się. Koniec bieżącego okna i początek następnego okna jest kontrolowany przez obserwowaną sekwencję liczb całkowitych generowanych przez operatora Interval co sześć sekund. Ponieważ główna obserwowana sekwencja tworzy element co sekundę, każde okno będzie zawierać sześć elementów. Przykładowy kod zapisuje każde okno liczb całkowitych w oknie konsoli wraz ze znacznikiem czasu, który pokazuje, że nowe okno jest otwierane co sześć sekund.
using System;
using System.Reactive.Linq;
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 time when each window stops and the next window starts is ***//
//*** controlled by the IObservable<TWindowClosing> named seqWindowControl. It is returned ***//
//*** by the lambda expression which is passed to the Window operator. In this case it ***//
//** returns another IObservable<long> generated by the Interval operator. So whenever ***//
//*** seqWindowControl produces a item, the current window into the mainSequence stops and ***//
//*** a new window starts. ***//
//*********************************************************************************************//
var mainSequence = Observable.Interval(TimeSpan.FromSeconds(1));
var seqWindowed = mainSequence.Window(() =>
{
var seqWindowControl = Observable.Interval(TimeSpan.FromSeconds(6));
return seqWindowControl;
});
//*********************************************************************************************//
//*** A subscription to seqWindowed will provide a new IObservable<long> every 6 secs. ***//
//*** ***//
//*** Create a subscription to each window into the main sequence and list the values along ***//
//*** with the time the window was opened and the previous window was closed. ***//
//*********************************************************************************************//
seqWindowed.Subscribe(seqWindow =>
{
Console.WriteLine("\nA new window into the main sequence has opened: {0}\n",DateTime.Now.ToString());
seqWindow.Subscribe(x =>
{
Console.WriteLine("Integer : {0}", x);
});
});
Console.ReadLine();
}
}
}
Następujące dane wyjściowe zostały wygenerowane przez przykładowy kod.
A new window into the main sequence has opened: 6/1/2011 8:48:43 PM
Integer : 0
Integer : 1
Integer : 2
Integer : 3
Integer : 4
Integer : 5
A new window into the main sequence has opened: 6/1/2011 8:48:49 PM
Integer : 6
Integer : 7
Integer : 8
Integer : 9
Integer : 10
Integer : 11
A new window into the main sequence has opened: 6/1/2011 8:48:55 PM
Integer : 12
Integer : 13
Integer : 14
Integer : 15
Integer : 16
Integer : 17
A new window into the main sequence has opened: 6/1/2011 8:49:02 PM
Integer : 18
Integer : 19
Integer : 20
Integer : 21
Integer : 22
Integer : 23