Skip to content

Never

1. 概要

Never は、値を一切発行せず、完了もエラーも発生しない Observable を生成するファクトリメソッドです。購読すると無期限に待機し続けます。

テストでタイムアウトの検証を行う場合や、合成オペレーターでの無限ストリームのプレースホルダーとして使用します。

2. シグネチャ

基本

csharp
public static Observable<T> Never<T>()

値を発行せず、完了もしない Observable を返します。

csharp
Observable.Never<int>()

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

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

Never は購読後、何も発行せず、完了もエラーも発生しません。タイムラインは無限に続きます。

4. サンプルコード

csharp
using R3;

// 完了しない Observable
Observable.Never<int>()
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),          // 呼ばれない
        r => Console.WriteLine($"完了: {r}"));       // 呼ばれない
// 何も出力されず、購読は無期限に継続する

// Race と組み合わせてタイムアウトをテスト
var timeout = Observable.Timer(TimeSpan.FromSeconds(5), TimeProvider.System)
    .Select(_ => "タイムアウト");
var neverSource = Observable.Never<string>();

Observable.Race(neverSource, timeout)
    .Subscribe(x => Console.WriteLine(x));
// 出力(5 秒後): タイムアウト

5. 補足

関連 API

  • Empty — 値を発行せず即座に正常完了する(Never は完了しない)
  • Throw — 値を発行せずエラーで完了する