1

AsyncCallbackデリゲート呼び出しが完了した後、関数がすべての後処理タスクを実行することを読みました。私の質問は、デリゲート呼び出しが戻るまで待機するようEndInvokeに、後処理タスクを after/below に書くことの違いは何ですか。EndInvoke

4

2 に答える 2

4

デリゲートの BeginInvoke() メソッドを使用するポイントは、ターゲットが非同期で実行されることです。BeginInvoke() の直後に EndInvoke() を呼び出すと、使用する意味がなくなります。デリゲートを直接呼び出すだけで、まったく同じ動作が得られますが、オーバーヘッドとスレッド化の問題はありません。

値は、ターゲット メソッドが完了した直後に非同期でコールバックを取得しています。その後EndInvoke () を呼び出すと、すぐに完了します。これにより、システム リソースがクリーンアップされ、ターゲット メソッドが例外をスローしたときに例外が再スローされます。賛成の回答で提案されているように EndInvoke() の呼び出しをスキップしないでください。少なくとも 10 分間はリソースがリークします。

于 2011-05-01T20:20:55.113 に答える
2

EndInvoke をまったく呼び出さず、コールバックのみに依存することを選択できます。このように、開始はあなたではなくデリゲート自体から行われ、呼び出しがいつ完了するかを決定する必要はありません。

于 2011-05-01T19:29:18.990 に答える