AnyAsync
1. 概要
AnyAsync は、Observable シーケンスに要素が存在するか、または条件を満たす要素が存在するかを判定し、その結果を Task<Boolean> として返すオペレーターです。述語なしのオーバーロードはシーケンスが空でないかを判定し、述語ありのオーバーロードは条件に一致する要素が見つかった時点で true を返して短絡評価します。
2. シグネチャ
要素の存在判定(述語なし)
csharp
public static Task<Boolean> AnyAsync<T>(
this Observable<T> source,
CancellationToken cancellationToken = default)シーケンスに 1 つ以上の要素が存在する場合に true を返します。最初の要素を受信した時点で即座に true を返し、購読を解除します。シーケンスが空のまま完了した場合は false を返します。
述語による条件判定
csharp
public static Task<Boolean> AnyAsync<T>(
this Observable<T> source,
Func<T, Boolean> predicate,
CancellationToken cancellationToken = default)predicate を満たす要素が 1 つでも存在する場合に true を返します。条件に一致する要素が見つかった時点で短絡評価を行います。
オーバーロードの使い分け
| オーバーロード | 用途 |
|---|---|
| 述語なし | シーケンスが空でないことを確認したい場合 |
| 述語あり | 特定の条件を満たす要素が存在するかを確認したい場合 |
3. マーブルダイアグラム
述語なしの場合は最初の要素を受信した時点で true が返されます。述語ありの場合は条件に一致する要素が見つかった時点で true が返され、見つからないまま完了すると false が返されます。
4. サンプルコード
csharp
// シーケンスに要素が存在するか
var source = new[] { 1, 2, 3 }.ToObservable();
bool hasAny = await source.AnyAsync();
Console.WriteLine(hasAny); // Truecsharp
// 空のシーケンス
var empty = Observable.Empty<int>();
bool hasAny = await empty.AnyAsync();
Console.WriteLine(hasAny); // Falsecsharp
// 述語を使用:偶数が含まれるか
var source = new[] { 1, 3, 5, 4, 7 }.ToObservable();
bool hasEven = await source.AnyAsync(x => x % 2 == 0);
Console.WriteLine(hasEven); // True(4 の時点で判定終了)5. 補足
- AllAsync と対になるオペレーターです。
AnyAsyncは いずれかの要素 が条件を満たすかを判定し、AllAsyncは すべての要素 が条件を満たすかを判定します。 - 述語なしの
AnyAsyncは IsEmptyAsync の論理否定に相当します。await AnyAsync()は!(await IsEmptyAsync())と等価です。