動機

Web API 呼出しはネットを介した呼び出しです。失敗するかもしれませんし、時間がかかるかもしれません。サーバでは呼出しに応じて、データベース問合せなどをおこなうケースも多いでしょうし。

ネットワークからの反応が非常に遅い場合、ユーザ入力を伴うプログラムなら、ユーザはリクエストをキャンセルしたり、とりあえず別の操作(別情報をみるとか)をしたりしたいでしょう。

計算主体のプログラムにとっては、ネットワーク問い合わせが秒で終わったとしても、GHz オーダー(1 clock はナノ秒以下)で動作し、コンテキストスイッチもマイクロ秒程度でおこなう現在の CPU にとっては、ミリ秒待つってのはそんなに嬉しいことじゃありません(100万回お休みなんて罰ゲームとしても酷すぎる)。

ということで、

  • 同期呼出し(synchronous call): 結果が返るのを待つ
    • 呼び出したら、結果が返ってくるまで「待つ=他のことできない」感じ

とは違う、

  • 非同期呼出し(synchronous call): 結果が返るのを待たない
    • 呼び出し「だけ」して、呼び出し側は別のことできる。

が重要となります。 ということで、今回は「非同期」「待たない」プログラミング技術を紹介します。