Skip to content

Empty

1. 概要

Empty は、値を一切発行せずに即座に正常完了する Observable を生成するファクトリメソッドです。

TimeProviderTimeSpan を指定するオーバーロードを使うと、完了通知を非同期的に、または指定時間だけ遅延させることができます。

2. シグネチャ

即座に完了

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

購読されると直ちに正常完了します。値は発行されません。

csharp
Observable.Empty<int>()

TimeProvider 指定

csharp
public static Observable<T> Empty<T>(TimeProvider timeProvider)

TimeProvider を使って非同期的に完了通知を送ります。

csharp
Observable.Empty<string>(TimeProvider.System)

遅延付き

csharp
public static Observable<T> Empty<T>(TimeSpan dueTime, TimeProvider timeProvider)

指定した時間が経過した後に完了通知を送ります。

csharp
Observable.Empty<int>(TimeSpan.FromSeconds(1), TimeProvider.System)

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

オーバーロード使う場面
Empty<T>()即座に空のシーケンスを返す
Empty<T>(TimeProvider)非同期的に完了通知を送る
Empty<T>(TimeSpan, TimeProvider)指定時間だけ遅延してから完了する

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

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

Empty は値を一切発行しません。購読後、即座に(または指定時間の経過後に)完了通知のみを送ります。

4. サンプルコード

csharp
using R3;

// 即座に完了する空の Observable
Observable.Empty<int>()
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),          // 呼ばれない
        r => Console.WriteLine($"完了: {r}"));
// 出力: 完了: Success

// 遅延付き: 1 秒後に完了
Observable.Empty<string>(TimeSpan.FromSeconds(1), TimeProvider.System)
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),          // 呼ばれない
        r => Console.WriteLine($"完了: {r}"));
// 出力(1 秒後): 完了: Success

// Concat と組み合わせてデフォルトのフォールバック
var source = Observable.Empty<int>();
Observable.Concat(source, Observable.Return(0))
    .Subscribe(x => Console.WriteLine($"値: {x}"));
// 出力: 値: 0

5. 補足

関連 API

  • Never — 値を発行せず、完了もしない(無限に待機)
  • Throw — 値を発行せず、エラーで完了する
  • ReturnOnCompleted — 値を発行せず、指定した Result(成功またはエラー)で完了する