AsyncCallback
デリゲート呼び出しが完了した後、関数がすべての後処理タスクを実行することを読みました。私の質問は、デリゲート呼び出しが戻るまで待機するようEndInvoke
に、後処理タスクを after/below に書くことの違いは何ですか。EndInvoke
2 に答える
4
デリゲートの BeginInvoke() メソッドを使用するポイントは、ターゲットが非同期で実行されることです。BeginInvoke() の直後に EndInvoke() を呼び出すと、使用する意味がなくなります。デリゲートを直接呼び出すだけで、まったく同じ動作が得られますが、オーバーヘッドとスレッド化の問題はありません。
値は、ターゲット メソッドが完了した直後に非同期でコールバックを取得しています。その後EndInvoke () を呼び出すと、すぐに完了します。これにより、システム リソースがクリーンアップされ、ターゲット メソッドが例外をスローしたときに例外が再スローされます。賛成の回答で提案されているように EndInvoke() の呼び出しをスキップしないでください。少なくとも 10 分間はリソースがリークします。
于 2011-05-01T20:20:55.113 に答える
2
EndInvoke をまったく呼び出さず、コールバックのみに依存することを選択できます。このように、開始はあなたではなくデリゲート自体から行われ、呼び出しがいつ完了するかを決定する必要はありません。
于 2011-05-01T19:29:18.990 に答える