Skip to content

Repeat

1. 概要

Repeat は、指定した値を指定回数だけ繰り返し発行して完了するファクトリメソッドです。

同じ値を複数回必要とするシーケンスを簡潔に生成できます。

2. シグネチャ

基本

csharp
public static Observable<T> Repeat<T>(T value, int count)

valuecount 回発行して完了します。

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 のマーブルダイアグラム

Repeat(value, count) は同じ値 valuecount 回発行した後、完了通知を送ります。

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 はすべての要素が同じ値である点が異なります。