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. マーブルダイアグラム
ソースシーケンスの各要素が述語で評価されます。すべての要素が条件を満たせば 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); // Truecsharp
// 条件を満たさない要素がある場合(短絡評価)
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)))と等価です。