Skip to content

Range

1. 概要

Range は、指定した開始値から連続する整数シーケンスを発行するファクトリメソッドです。start から始まり、count 個の値を発行して完了します。

LINQ の Enumerable.Range のリアクティブ版に相当します。

2. シグネチャ

基本

csharp
public static Observable<int> Range(int start, int count)

start から start + count - 1 までの連続する整数を発行し、完了します。

csharp
Observable.Range(1, 5)  // 1, 2, 3, 4, 5

CancellationToken 付き

csharp
public static Observable<int> Range(int start, int count, CancellationToken cancellationToken)

キャンセルトークンを指定して、途中で発行を中止できるオーバーロードです。

csharp
var cts = new CancellationTokenSource();
Observable.Range(0, 1000, cts.Token)

オーバーロードの使い分け

overload使う場面
Range(int, int)連続する整数列を単純に発行する
Range(int, int, CancellationToken)長いシーケンスを途中でキャンセルする可能性がある場合

3. マーブルダイアグラム

Range のマーブルダイアグラム

Range(start, count)startstart + 1、…、start + count - 1 の値を順に発行し、最後に完了通知を送ります。

4. サンプルコード

csharp
using R3;

// 1 から 5 までの整数を発行
Observable.Range(1, 5)
    .Subscribe(x => Console.WriteLine(x));
// 出力: 1, 2, 3, 4, 5

// 0 始まりで 3 個の整数を発行
Observable.Range(0, 3)
    .Subscribe(x => Console.WriteLine($"値: {x}"));
// 出力:
// 値: 0
// 値: 1
// 値: 2

// CancellationToken を使用した例
var cts = new CancellationTokenSource();
Observable.Range(1, 100, cts.Token)
    .Subscribe(x =>
    {
        Console.WriteLine(x);
        if (x == 5) cts.Cancel();
    });
// 出力: 1, 2, 3, 4, 5(キャンセルにより途中で停止)

5. 補足

Repeat との違い

Repeat は同じ値を指定回数だけ繰り返し発行します。Range は各要素が異なる連続した整数を発行する点が異なります。