DoCancelOnCompleted
1. 概要
DoCancelOnCompleted は、ソース Observable が完了(成功・失敗を問わず)した際に、指定された CancellationTokenSource をキャンセルするオペレーターです。Observable のライフサイクルと CancellationToken ベースのキャンセル処理を連携させる場合に便利です。
2. シグネチャ
基本オーバーロード
csharp
public static Observable<T> DoCancelOnCompleted<T>(
this Observable<T> source,
CancellationTokenSource cancellationTokenSource)ソースシーケンスが完了(OnCompleted)したとき、渡された CancellationTokenSource の Cancel() を呼び出します。シーケンスの要素自体は変更されません。
3. マーブルダイアグラム
ソースが完了すると、CancellationTokenSource がキャンセルされます。要素の流れには影響を与えません。
4. サンプルコード
csharp
var cts = new CancellationTokenSource();
var source = new Subject<int>();
source
.DoCancelOnCompleted(cts)
.Subscribe();
// CancellationToken を利用する非同期処理
_ = Task.Run(async () =>
{
while (!cts.Token.IsCancellationRequested)
{
await Task.Delay(100, cts.Token);
Console.WriteLine("Running...");
}
Console.WriteLine("Cancelled!");
});
source.OnNext(1);
source.OnNext(2);
source.OnCompleted(); // cts がキャンセルされ、非同期処理が停止する