Repeat
1. 概要
Repeat は、指定した値を指定回数だけ繰り返し発行して完了するファクトリメソッドです。
同じ値を複数回必要とするシーケンスを簡潔に生成できます。
2. シグネチャ
基本
csharp
public static Observable<T> Repeat<T>(T value, int count)value を count 回発行して完了します。
csharp
Observable.Repeat("hello", 3) // "hello", "hello", "hello"CancellationToken 付き
csharp
public static Observable<T> Repeat<T>(T value, int count, CancellationToken cancellationToken)キャンセルトークンを指定して、途中で発行を中止できるオーバーロードです。
csharp
var cts = new CancellationTokenSource();
Observable.Repeat(0, 1000, cts.Token)オーバーロードの使い分け
| overload | 使う場面 |
|---|---|
Repeat<T>(T, int) | 同じ値を指定回数発行する |
Repeat<T>(T, int, CancellationToken) | 長い繰り返しを途中でキャンセルする可能性がある場合 |
3. マーブルダイアグラム
Repeat(value, count) は同じ値 value を count 回発行した後、完了通知を送ります。
4. サンプルコード
csharp
using R3;
// 同じ値を 3 回発行
Observable.Repeat("hello", 3)
.Subscribe(x => Console.WriteLine(x));
// 出力:
// hello
// hello
// hello
// 数値を 5 回繰り返す
Observable.Repeat(42, 5)
.Subscribe(x => Console.WriteLine($"値: {x}"));
// 出力:
// 値: 42
// 値: 42
// 値: 42
// 値: 42
// 値: 42
// CancellationToken を使用した例
var cts = new CancellationTokenSource();
var count = 0;
Observable.Repeat(1, 100, cts.Token)
.Subscribe(x =>
{
count++;
Console.WriteLine($"#{count}");
if (count == 3) cts.Cancel();
});
// 出力: #1, #2, #3(キャンセルにより途中で停止)5. 補足
Range との違い
Range は連続する異なる整数値のシーケンスを生成します。Repeat はすべての要素が同じ値である点が異なります。