Observable.Window<TSource, méthode TWindowClosing> (IObservable<TSource>, Func<IObservable<TWindowClosing>>)
Projette chaque élément d’une séquence observable dans des fenêtres consécutives qui ne se chevauchent pas.
Espace de noms :System.Reactive.Linq
Assemblée: System.Reactive (en System.Reactive.dll)
Syntaxe
'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.
Paramètres de type
- TSource
Type de la source.
- TWindowClosing
Type de fermeture de fenêtre.
Paramètres
- source
Type : System.IObservable<TSource>
Séquence source sur laquelle produire des fenêtres.
- windowClosingSelector
Type : System.Func<IObservable<TWindowClosing>>
Fonction appelée pour définir les limites des fenêtres produites.
Valeur de retour
Type : System.IObservable<IObservable<TSource>>
Séquence observable de fenêtres.
Remarque sur l'utilisation
En Visual Basic et C#, vous pouvez appeler cette méthode en tant que méthode instance sur n’importe quel objet de type IObservable<TSource>. Lorsque vous utilisez la syntaxe des méthodes d'instance pour appeler cette méthode, omettez le premier paramètre. Pour plus d'informations, consultez ou .
Notes
L’opérateur Window décompose une séquence observable en fenêtres consécutives qui ne se chevauchent pas. La fin de la fenêtre active et le début de la fenêtre suivante sont contrôlés par une séquence observable qui est le résultat de la fonction windowClosingSelect qui est passée en tant que paramètre d’entrée à l’opérateur. L’opérateur peut être utilisé pour regrouper un ensemble d’événements dans une fenêtre. Par exemple, les états d’une transaction peuvent être la séquence main observée. Ces états peuvent inclure : Préparation, Préparé, Actif et Engagé/Abandonné. La séquence main peut inclure tous ces états s’ils se produisent dans cet ordre. La fonction windowClosingSelect peut retourner une séquence observable qui produit uniquement une valeur sur les états Commit ou Abort. Cela ferme la fenêtre qui représente les événements de transaction pour une transaction particulière.
Exemples
L’exemple simple suivant décompose une séquence d’entiers en fenêtres consécutives qui ne se chevauchent pas. La fin de la fenêtre active et le début de la fenêtre suivante sont contrôlés par une séquence observable d’entiers produite par l’opérateur Interval toutes les six secondes. Étant donné que la séquence observable main produit un élément toutes les secondes, chaque fenêtre aura six éléments. L’exemple de code écrit chaque fenêtre d’entiers dans la fenêtre de console avec un horodatage qui montre qu’une nouvelle fenêtre est ouverte toutes les six secondes.
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();
}
}
}
La sortie suivante a été générée par l’exemple de code.
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