Observable.Merge<TSource, metoda (IObservable<TSource>>[])
Scala wszystkie obserwowane sekwencje w jedną możliwą do obserwacji sekwencję.
Przestrzeń nazw:System.Reactive.Linq
Zestawu: System.Reaktywny (w System.Reactive.dll)
Składnia
'Declaration
Public Shared Function Merge(Of TSource) ( _
ParamArray sources As IObservable(Of TSource)() _
) As IObservable(Of TSource)
'Usage
Dim sources As IObservable(Of TSource)()
Dim returnValue As IObservable(Of TSource)
returnValue = Observable.Merge(sources)
public static IObservable<TSource> Merge<TSource>(
params IObservable<TSource>[] sources
)
public:
generic<typename TSource>
static IObservable<TSource>^ Merge(
... array<IObservable<TSource>^>^ sources
)
static member Merge :
sources:IObservable<'TSource>[] -> IObservable<'TSource>
JScript does not support generic types and methods.
Parametry typu
- Tsource
Typ źródła.
Parametry
- sources
Typ: System.IObservable<TSource>[]
Obserwowane sekwencje.
Wartość zwracana
Typ: System.IObservable<TSource>
Obserwowana sekwencja, która scala elementy obserwowanych sekwencji.
Uwagi
Operator scalania służy do scalania wielu obserwowanych sekwencji w jedną sekwencji obserwowalnych. Różne przeciążenia tego operatora zapewniają elastyczność określania sekwencji do scalenia. Scalona sekwencja będzie nadal tworzyć elementy w scalonej sekwencji, dopóki wszystkie sekwencje nie zostaną uruchomione do ukończenia lub jedna z sekwencji spowoduje wystąpienie błędu.
Przykłady
W poniższym przykładzie użyto operatora Interwał, aby utworzyć sekwencję liczb całkowitych rozpoczynających się od 0. Nowa liczba całkowita jest wytwarzana co 500 ms. Tworzona jest dwie odfiltrowane sekwencje. Jedna sekwencja filtruje oryginalną sekwencję, aby wygenerować co trzecią liczbę całkowitą. Druga sekwencja filtruje oryginalną sekwencję, aby wygenerować tylko 5. liczbę całkowitą. Następnie operator scalania służy do scalania tych dwóch przefiltrowanych sekwencji w jedną sekwencję liczb całkowitych. Subskrypcja jest tworzona dla scalonej sekwencji, a każdy element jest zapisywany w oknie konsoli.
using System;
using System.Reactive.Linq;
using System.Reactive.Concurrency;
namespace Example
{
class Program
{
static void Main()
{
//*********************************************************************************************//
//*** Generate a sequence of integers producing a new integer every .5 sec. ***//
//*********************************************************************************************//
var obsInt = Observable.Interval(TimeSpan.FromMilliseconds(500), Scheduler.ThreadPool);
//*********************************************************************************************//
//*** Filter the integer sequence to produce only every 3rd integer. ***//
//*********************************************************************************************//
var obsThrees = obsInt.Where(i => i % 3 == 0);
//*********************************************************************************************//
//*** Filter the integer sequence to produce only every 5th integer. ***//
//*********************************************************************************************//
var obsFives = obsInt.Where(i => i % 5 == 0);
//***********************************************************************************************//
//*** Subscribe to a merged sequence of the two filtered sequences. This merged sequence will ***//
//*** produce every 3rd and every 5th integer. ***//
//***********************************************************************************************//
var obs = Observable.Merge(new IObservable<long>[2] {obsThrees, obsFives});
using (IDisposable handle = obs.Subscribe(x => Console.WriteLine(x)))
{
Console.WriteLine("Press ENTER to exit...\n");
Console.ReadLine();
}
}
}
}
Następujące dane wyjściowe zostały wygenerowane przez przykładowy kod.
Press ENTER to exit...
0
0
3
5
6
9
10
12
15
15
18
20
21
24
25
27
30
30