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, 5CancellationToken 付き
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(start, count) は start、start + 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 は各要素が異なる連続した整数を発行する点が異なります。