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. マーブルダイアグラム
ソースシーケンスの各要素を受信するたびにカウンターを増加させ、OnCompleted 時にカウント値が Int64 として Task の結果で返されます。
4. サンプルコード
csharp
// 全要素数を Int64 で取得
var source = new[] { 1, 2, 3, 4, 5 }.ToObservable();
long count = await source.LongCountAsync();
Console.WriteLine(count); // 5csharp
// 条件に一致する要素数を取得
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