RubyのContinuation
Continuationは慣れるととても自然な概念だ。本当に、「ここから先の残り」「続き」だから。続きを保存しておいて制御を一時的に余所へやりたいときに便利である。
へえええ。←夜中に大声。
トランザクションの例で絶句。ループの状態まで保存されるですか。どんな使い方ができるかなぁ。
たとえば、数万件あるデータをDBに入れるときに
- 1000件ずつ小分けにコミットしつつ、
- コミットが終わった分をその都度にユーザへ通知。
WebアプリならContinuationのタイミングでCometを使ってバシバシ送りつけてプログレスバーを伸ばしてやるとか。
普通書くと結構ごちゃごちゃしたコードになりそうだけど、Continuationを使うと、
- コードを主な意図に沿って自然に書ける。(ここでデータを確定する!)
- 制御レベルのコードを業務ロジックと別にできる。(1000件ごとにプログレスバーを伸ばす!)
となるのが利点かな。
あ、簡易AOPとして使えるか?この休みで実験してみよう。*1
*1:と書いておけばやる気がでるかも・・・