Skip to content

DoCancelOnCompleted

1. 概要

DoCancelOnCompleted は、ソース Observable が完了(成功・失敗を問わず)した際に、指定された CancellationTokenSource をキャンセルするオペレーターです。Observable のライフサイクルと CancellationToken ベースのキャンセル処理を連携させる場合に便利です。

2. シグネチャ

基本オーバーロード

csharp
public static Observable<T> DoCancelOnCompleted<T>(
    this Observable<T> source,
    CancellationTokenSource cancellationTokenSource)

ソースシーケンスが完了(OnCompleted)したとき、渡された CancellationTokenSourceCancel() を呼び出します。シーケンスの要素自体は変更されません。

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

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

ソースが完了すると、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 がキャンセルされ、非同期処理が停止する