Skip to content

Throw

1. 概要

Throw は、値を一切発行せずに即座に指定した例外でエラー通知する Observable を生成するファクトリメソッドです。

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

2. シグネチャ

即座にエラー

csharp
public static Observable<T> Throw<T>(Exception exception)

購読されると直ちに指定した例外でエラー通知します。値は発行されません。

csharp
Observable.Throw<int>(new InvalidOperationException("エラー"))

TimeProvider 指定

csharp
public static Observable<T> Throw<T>(Exception exception, TimeProvider timeProvider)

TimeProvider を使って非同期的にエラー通知を送ります。

csharp
Observable.Throw<string>(new Exception("非同期エラー"), TimeProvider.System)

遅延付き

csharp
public static Observable<T> Throw<T>(Exception exception, TimeSpan dueTime, TimeProvider timeProvider)

指定した時間が経過した後にエラー通知を送ります。

csharp
Observable.Throw<int>(
    new TimeoutException(),
    TimeSpan.FromSeconds(3),
    TimeProvider.System)

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

オーバーロード使う場面
Throw<T>(Exception)即座にエラーを通知する
Throw<T>(Exception, TimeProvider)非同期的にエラーを通知する
Throw<T>(Exception, TimeSpan, TimeProvider)指定時間だけ遅延してからエラーを通知する

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

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

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

4. サンプルコード

csharp
using R3;

// 即座にエラーを通知
Observable.Throw<int>(new InvalidOperationException("無効な操作"))
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),          // 呼ばれない
        r => Console.WriteLine($"完了: {r}"));
// 出力: 完了: Failure(System.InvalidOperationException: 無効な操作)

// 遅延付き: 2 秒後にエラー
Observable.Throw<string>(
    new TimeoutException("タイムアウト"),
    TimeSpan.FromSeconds(2),
    TimeProvider.System)
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),          // 呼ばれない
        r => Console.WriteLine($"完了: {r}"));
// 出力(2 秒後): 完了: Failure(System.TimeoutException: タイムアウト)

// Concat と組み合わせてエラーフォールバック
var source = Observable.Empty<int>();
Observable.Concat(source, Observable.Throw<int>(new Exception("ソースが空です")))
    .Subscribe(
        x => Console.WriteLine($"値: {x}"),
        r => Console.WriteLine($"完了: {r}"));
// 出力: 完了: Failure(System.Exception: ソースが空です)

5. 補足

関連 API

  • Empty — 値を発行せず正常完了する(Throw はエラーで完了する)
  • ReturnOnCompletedResult で成功またはエラーを柔軟に指定できる