よほどのC#初心者でも無い限り、delegateの便利さを理解していて無名delegateを活用するコードを多用していることと思う。しかしdelegateでcontinuationが実現できることは知らない人が多い。 まずcontinuationとは何なのか、何故それが必要なのかを簡単に説明しておく。ここで言うcontinuationとはSchemeで言うcontinuation(継続)である。 簡単に言えば関数の実行を一時的に中断しておいて、次回にその関数が呼び出されたときにその続きを実行する機能である。「ああ、C#ならyieldで出来るよね」と思った人、それ正解。 どこでこの機能が必要なのか。例えば次のプログラム。 ウィンドウ内にダイアログを(DirectXやら何やらを用いて)自前で描画したい。ダイアログは「はい」「いいえ」ボタンがあり、そこがクリックされたときにハンドラが呼び出される