動機
Web API 呼出しはネットを介した呼び出しです。失敗するかもしれませんし、時間がかかるかもしれません。サーバでは呼出しに応じて、データベース問合せなどをおこなうケースも多いでしょうし。
ネットワークからの反応が非常に遅い場合、ユーザ入力を伴うプログラムなら、ユーザはリクエストをキャンセルしたり、とりあえず別の操作(別情報をみるとか)をしたりしたいでしょう。
計算主体のプログラムにとっては、ネットワーク問い合わせが秒で終わったとしても、GHz オーダー(1 clock はナノ秒以下)で動作し、コンテキストスイッチもマイクロ秒程度でおこなう現在の CPU にとっては、ミリ秒待つってのはそんなに嬉しいことじゃありません(100万回お休みなんて罰ゲームとしても酷すぎる)。
ということで、
- 同期呼出し(synchronous call): 結果が返るのを待つ
- 呼び出したら、結果が返ってくるまで「待つ=他のことできない」感じ
とは違う、
- 非同期呼出し(synchronous call): 結果が返るのを待たない
- 呼び出し「だけ」して、呼び出し側は別のことできる。
が重要となります。 ということで、今回は「非同期」「待たない」プログラミング技術を紹介します。