Skip to content

AllAsync

1. 概要

AllAsync は、Observable シーケンスの すべての要素 が指定した条件を満たすかどうかを判定し、その結果を Task<Boolean> として返すオペレーターです。条件を満たさない要素が見つかった時点で false を返して短絡評価(ショートサーキット)し、購読を終了します。すべての要素が条件を満たしてシーケンスが完了した場合は true を返します。

2. シグネチャ

述語による全要素判定

csharp
public static Task<Boolean> AllAsync<T>(
    this Observable<T> source,
    Func<T, Boolean> predicate,
    CancellationToken cancellationToken = default)

predicate にすべての要素が一致する場合に true を返します。条件に合わない要素が検出された時点で即座に false を返し、ソースの購読を解除します。空のシーケンスに対しては true を返します。

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

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

ソースシーケンスの各要素が述語で評価されます。すべての要素が条件を満たせば OnCompleted 時に true が返され、条件を満たさない要素が見つかった時点で false が返されます。

4. サンプルコード

csharp
// すべての数値が正の数かを判定
var source = new[] { 1, 2, 3, 4, 5 }.ToObservable();

bool allPositive = await source.AllAsync(x => x > 0);
Console.WriteLine(allPositive); // True
csharp
// 条件を満たさない要素がある場合(短絡評価)
var source = new[] { 2, 4, 5, 6, 8 }.ToObservable();

bool allEven = await source.AllAsync(x => x % 2 == 0);
Console.WriteLine(allEven); // False(5 の時点で判定終了)
csharp
// 空のシーケンス
var empty = Observable.Empty<int>();

bool result = await empty.AllAsync(x => x > 0);
Console.WriteLine(result); // True(空集合に対する全称命題は真)

5. 補足

  • AnyAsync と対になるオペレーターです。AllAsyncすべての要素 が条件を満たすかを判定し、AnyAsyncいずれかの要素 が条件を満たすかを判定します。
  • 論理的には AllAsync(predicate)!(await AnyAsync(x => !predicate(x))) と等価です。