Skip to content

LongCountAsync

1. 概要

LongCountAsync は、Observable シーケンスの要素数を数え、その結果を Task<Int64> として返すオペレーターです。CountAsync と同様に動作しますが、Int32.MaxValue(2,147,483,647)を超える非常に大きなシーケンスに対応できます。述語を指定した場合は、条件を満たす要素のみをカウントします。

2. シグネチャ

全要素のカウント

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

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

条件付きカウント

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

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

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

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

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

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

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

4. サンプルコード

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

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

long oddCount = await source.LongCountAsync(x => x % 2 != 0);
Console.WriteLine(oddCount); // 5