Async/await
Scalaの実験的なScala-async拡張機能では、通常のメソッドとは異なるものの、awaitは「メソッド」である。さらに、メソッドを非同期としてマークする必要があるC# 5.0とは異なり、Scala-asyncでは、コードの「ブロック」は非同期の「呼び出し」で囲まれる。
これによりコールバックがトリガーされ、その値をdataに割り当てることでFindPageSize()に実行を継続させる。
最後にメソッドは、配列の長さを示す単純な整数値であるdata.Lengthを返す。コンパイラーは、以前に返却されたTaskを解決するものとしてこれを再解釈し、その長さの値を使って何かをするためにメソッドの呼び出し元においてコールバックをトリガーする。
async/awaitを使用するメソッドは、必要な数のawait式を使用でき、それぞれが同じ方法で処理される(promiseは最初のawaitに対してのみ呼び出し元に返されるが、他のすべてのawaitは内部コールバックを利用する)。関数はpromiseオブジェクトを直接保持し、最初に他の処理(他の非同期タスクの開始を含む)を実行して、結果が必要になるまでpromiseの待機を遅らせることもできる。promiseを使用する関数には、複数のpromiseを一度にまたは特定のパターン(C#のTaskなど)で待機できるようにするpromise集計メソッドもある: Task.WhenAll() は、引数内のすべてのTaskが解決されたときに解決される、値のないTaskを返す。多くのpromiseタイプには、複数の結果コールバックを設定したり、特に長時間実行されるタスクの進行状況を検査したりできるなど、async/awaitパターンが通常使用する機能を超える追加機能がある。