将所有可观测序列合并到单个可观测序列中。
Namespace:System.Reactive.Linq
装配: System.Reactive.dll) 中的 System.Reactive (
语法
'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.
类型参数
- TSource
源的类型。
参数
- sources
类型: System.IObservable<TSource>[]
可观测序列。
返回值
类型: System.IObservable<TSource>
合并可观测序列的元素的可观测序列。
备注
Merge 运算符用于将多个可观测序列合并到单个可观测序列中。 此运算符的各种重载为指定要合并在一起的序列提供了灵活性。 合并序列将继续生成合并序列中的项,直到所有序列都运行完成或其中一个序列生成错误。
示例
以下示例使用 Interval 运算符创建从 0 开始的整数序列。 每 500 毫秒生成一个新整数。 将创建两个筛选序列。 一个序列筛选原始序列,以生成每三个整数。 另一个序列筛选原始序列,以仅生成第 5 个整数。 然后,使用 Merge 运算符将这两个筛选的序列合并为单个整数序列。 为合并序列创建订阅,并将每个项写入控制台窗口。
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();
}
}
}
}
示例代码生成了以下输出。
Press ENTER to exit...
0
0
3
5
6
9
10
12
15
15
18
20
21
24
25
27
30
30