Freigeben über


Observable.Window<TSource, TWindowClosing-Methode> (IObservable<TSource>, Func<IObservable<TWindowClosing>>)

Projiziert jedes Element einer beobachtbaren Sequenz in aufeinander folgende nicht überlappende Fenster.

Namespace:System.Reactive.Linq
Versammlung: System.Reactive (in System.Reactive.dll)

Syntax

'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.

Typparameter

  • TSource
    Der Quellentyp.
  • TWindowClosing
    Der Typ des Fensters, das geschlossen wird.

Parameter

  • source
    Typ: System.IObservable<TSource>
    Die Quellsequenz, über die Fenster erzeugt werden sollen.
  • windowClosingSelector
    Typ: System.Func<IObservable<TWindowClosing>>
    Eine Funktion, die aufgerufen wird, um die Grenzen der erzeugten Fenster zu definieren.

Rückgabewert

Typ: System.IObservable<IObservable<TSource>>
Eine beobachtbare Sequenz von Fenstern.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als instance-Methode für jedes Objekt vom Typ IObservable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter oder .

Bemerkungen

Der Window-Operator unterteilt eine beobachtbare Sequenz in aufeinander folgende nicht überlappende Fenster. Das Ende des aktuellen Fensters und der Anfang des nächsten Fensters werden durch eine beobachtbare Sequenz gesteuert, die das Ergebnis der windowClosingSelect-Funktion ist, die als Eingabeparameter an den Operator übergeben wird. Der Operator kann verwendet werden, um eine Gruppe von Ereignissen in einem Fenster zu gruppieren. Beispielsweise kann es sich bei den Zuständen einer Transaktion um die Standard sequenzieren, die beobachtet wird. Diese Zustände können folgendes umfassen: Vorbereiten, Vorbereitet, Aktiv und Commit/Aborted. Die Standard Sequenz kann alle diese Zustände enthalten, wenn sie in dieser Reihenfolge auftreten. Die windowClosingSelect-Funktion kann eine beobachtbare Sequenz zurückgeben, die nur einen Wert für den Status Committed oder Abort erzeugt. Dadurch würde das Fenster, das Transaktionsereignisse für eine bestimmte Transaktion darstellt, geschlossen.

Beispiele

Im folgenden einfachen Beispiel wird eine Sequenz von ganzen Zahlen in aufeinander folgende nicht überlappende Fenster unterteilt. Das Ende des aktuellen Fensters und der Anfang des nächsten Fensters werden durch eine beobachtbare Sequenz von ganzen Zahlen gesteuert, die alle sechs Sekunden vom Interval-Operator erzeugt werden. Da die Standard beobachtbare Sequenz alle Sekunden ein Element erzeugt, enthält jedes Fenster sechs Elemente. Der Beispielcode schreibt jedes Fenster mit ganzen Zahlen zusammen mit einem Zeitstempel, der zeigt, dass alle sechs Sekunden ein neues Fenster geöffnet wird.

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();
    }
  }
}

Die folgende Ausgabe wurde vom Beispielcode generiert.

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

Weitere Informationen

Verweis

Observable-Klasse

Fensterüberladung

System.Reactive.Linq-Namespace