Observable.Merge<TSource> 方法 (IObservable<TSource>[])

将所有可观测序列合并到单个可观测序列中。

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
    源的类型。

参数

返回值

类型: 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

另请参阅

参考

可观测类

合并重载

System.Reactive.Linq 命名空间