Throw
1. 概要
Throw は、値を一切発行せずに即座に指定した例外でエラー通知する Observable を生成するファクトリメソッドです。
TimeProvider と TimeSpan を指定するオーバーロードを使うと、エラー通知を非同期的に、または指定時間だけ遅延させることができます。
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 は値を一切発行しません。購読後、即座に(または指定時間の経過後に)エラー通知のみを送ります。
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はエラーで完了する) - ReturnOnCompleted —
Resultで成功またはエラーを柔軟に指定できる