Skip to content

CountAsync

1. 概要

CountAsync は、Observable シーケンスの要素数を数え、その結果を Task<Int32> として返すオペレーターです。述語を指定した場合は、条件を満たす要素のみをカウントします。シーケンスの完了まで待機してから結果を返します。

2. シグネチャ

全要素のカウント

csharp
public static Task<Int32> CountAsync<T>(
    this Observable<T> source,
    CancellationToken cancellationToken = default)

シーケンス内のすべての要素数を返します。

条件付きカウント

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

predicate を満たす要素のみをカウントして返します。

オーバーロードの使い分け

オーバーロード用途
述語なしシーケンスの全要素数を取得する場合
述語あり特定の条件を満たす要素数を取得する場合

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

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

ソースシーケンスの各要素を受信するたびにカウンターを増加させ、OnCompleted 時にカウント値が Task の結果として返されます。

4. サンプルコード

csharp
// 全要素数を取得
var source = new[] { 1, 2, 3, 4, 5 }.ToObservable();

int count = await source.CountAsync();
Console.WriteLine(count); // 5
csharp
// 条件に一致する要素数を取得
var source = new[] { 1, 2, 3, 4, 5, 6 }.ToObservable();

int evenCount = await source.CountAsync(x => x % 2 == 0);
Console.WriteLine(evenCount); // 3

5. 補足

  • 要素数が Int32.MaxValue(2,147,483,647)を超える可能性がある場合は、LongCountAsync を使用してください。LongCountAsyncInt64 で結果を返します。