ReturnOnCompleted
1. 概要
ReturnOnCompleted は、値を一切発行せずに、指定した Result で即座に(または遅延して)完了するファクトリメソッドです。
Result は成功(正常完了)またはエラー(異常完了)を表現できるため、完了通知やエラー通知だけを送りたい場合に使用します。データを伴わないシグナリングに適しています。
2. シグネチャ
即座に完了
csharp
public static Observable<T> ReturnOnCompleted<T>(Result result)購読されると直ちに、指定した Result で完了します。値は発行されません。
csharp
// 正常完了
Observable.ReturnOnCompleted<string>(Result.Success)
// エラーで完了
Observable.ReturnOnCompleted<string>(Result.Failure(new Exception("error")))TimeProvider 指定
csharp
public static Observable<T> ReturnOnCompleted<T>(Result result, TimeProvider timeProvider)TimeProvider を使って非同期的に完了通知を送ります。
csharp
Observable.ReturnOnCompleted<int>(Result.Success, TimeProvider.System)遅延付き
csharp
public static Observable<T> ReturnOnCompleted<T>(Result result, TimeSpan dueTime, TimeProvider timeProvider)指定した時間が経過した後に完了通知を送ります。
csharp
// 2 秒後にエラーで完了
Observable.ReturnOnCompleted<int>(
Result.Failure(new TimeoutException()),
TimeSpan.FromSeconds(2),
TimeProvider.System)オーバーロードの使い分け
| overload | 使う場面 |
|---|---|
ReturnOnCompleted<T>(Result) | 即座に完了またはエラーを通知する |
ReturnOnCompleted<T>(Result, TimeProvider) | 非同期的に完了通知を送る |
ReturnOnCompleted<T>(Result, TimeSpan, TimeProvider) | 指定時間だけ遅延してから完了通知を送る |
3. マーブルダイアグラム
ReturnOnCompleted は値を一切発行しません。購読後、即座に(または指定時間の経過後に)完了通知のみを送ります。Result が成功の場合は正常完了、失敗の場合はエラー通知となります。
4. サンプルコード
csharp
using R3;
// 正常完了のみ通知
Observable.ReturnOnCompleted<string>(Result.Success)
.Subscribe(
x => Console.WriteLine($"値: {x}"), // 呼ばれない
r => Console.WriteLine($"完了: {r}"));
// 出力: 完了: Success
// エラーで完了
Observable.ReturnOnCompleted<int>(Result.Failure(new InvalidOperationException("無効な操作")))
.Subscribe(
x => Console.WriteLine($"値: {x}"), // 呼ばれない
r => Console.WriteLine($"完了: {r}"));
// 出力: 完了: Failure(System.InvalidOperationException: 無効な操作)
// 遅延付きで正常完了
Observable.ReturnOnCompleted<string>(
Result.Success,
TimeSpan.FromSeconds(1),
TimeProvider.System)
.Subscribe(
x => Console.WriteLine($"値: {x}"), // 呼ばれない
r => Console.WriteLine($"完了: {r}"));
// 出力(1 秒後): 完了: Success