Skip to content

ToArrayAsync

1. 概要

ToArrayAsync は、Observable シーケンスのすべての要素を収集し、配列(T[])を Task<T[]> として返すオペレーターです。シーケンスが完了するまで要素をバッファリングします。

2. シグネチャ

配列への変換

csharp
public static Task<T[]> ToArrayAsync<T>(
    this Observable<T> source,
    CancellationToken cancellationToken = default)

シーケンスのすべての要素を T[] に収集します。要素は発行された順序で格納されます。

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

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

シーケンスのすべての要素を収集し、完了時に配列を単一の結果として出力します。

4. サンプルコード

csharp
// 基本的な使い方:Observable を配列に変換
var source = new[] { 1, 2, 3, 4, 5 }.ToObservable();

int[] array = await source.ToArrayAsync();
Console.WriteLine(string.Join(", ", array)); // 1, 2, 3, 4, 5
csharp
// フィルタリング後に配列として収集
var evenNumbers = await Observable.Range(1, 10)
    .Where(x => x % 2 == 0)
    .ToArrayAsync();

Console.WriteLine(string.Join(", ", evenNumbers)); // 2, 4, 6, 8, 10
csharp
// 空のシーケンスは空の配列を返す
var empty = await Observable.Empty<int>().ToArrayAsync();
Console.WriteLine(empty.Length); // 0

5. 補足

  • ToListAsync と比較すると、ToArrayAsyncT[](固定サイズ)を返し、ToListAsyncList<T>(可変サイズ)を返します。
  • ToArrayAsync の方がアロケーションがわずかに少ない場合がありますが、結果をそのまま使用するだけなら大きな違いはありません。
  • 後から要素の追加・削除が必要な場合は ToListAsync を使用してください。