fenri's diary

基本的には勉強し始めたC#のメモ。後は140字で収まらない駄文。

begininvoke invoke 違い

Invoke:Main Threadの作業が終わるまでまって、Work Threadの次の作業に入る

BeginInvoke:Main Threadの作業を待たずにWork Threadがどんどん作業して結果を寄せる。

デリゲートを使用した非同期プログラミング

デリゲートを使用すると、同期メソッドを非同期的に呼び出すことができます。
デリゲートを同期的に呼び出すと、Invoke メソッドによって対象メソッドが現在のスレッドで直接呼び出されます。
BeginInvoke メソッドが呼び出されると、共通言語ランタイム (CLR: Common Language Runtime) は要求をキューに置き、すぐに呼び出し元に戻ります。
対象メソッドは、スレッドプールのスレッドで非同期に呼び出されます。
要求を送信した元のスレッドは、対象メソッドと並行して継続実行できます。
BeginInvoke メソッドの呼び出しにコールバック メソッドを指定した場合、対象メソッドの終了時に、そのコールバックメソッドが呼び出されます。
コールバックメソッドでは、EndInvoke メソッドを使用して、戻り値と、入出力パラメーターまたは出力専用パラメーターを取得します。
BeginInvoke の呼び出しにコールバックメソッドを指定しなかった場合は、BeginInvoke を呼び出したスレッドから EndInvoke を呼び出すことができます。