私は自分のプロジェクトの一部で非同期メソッドを使用していますが、アプリケーションのスケーラビリティを大幅に向上させることができます。しかし、非同期メソッドが実際にバックグラウンドでどのように機能するのか疑問に思っていますか? .NET(またはWindows?)が通話が完了したことをどのように知っていますか?私が作った非同期呼び出しの数によっては、新しいスレッドが作成されているのがわかります(常にそうとは限りません...)。どうして?非同期メソッドはC#でどのように機能しますか?
さらに、リクエストを完了するまでの時間を監視したいと思います。概念をテストするために、Webサービスを非同期に呼び出し、ストップウォッチを開始した直後に次のコードを記述しました。
for (int i = 0; i < 10000; i++)
{
myWebService.BeginMyMethod(new MyRequest(), result, new AsyncCallback(callback), i);
stopWatches[i].Start();
}
// Call back stop the stopwatch after calling EndMyMethod
すべての要求(10000)は、同じ時間を開始し、期間は(0 =期間1を呼び出すなど1 =期間2を呼び出す)直線的に上がるだろう持っているので、これは動作しません。非同期メソッド(要求が実際に実行されてから最後まで)を使用して、呼び出しの実際の期間をどのように監視できますか?
UPDATE:非同期メソッドが流れを遮断していますか?私はそれがThreadPool
を使用していることを理解していますが、IAsyncResult
は通話が完了したことを知り、CallBack
メソッドを呼び出す時間ですか?
1. ThreadPool、2. ThreadPoolの仕組みの詳細を参照してください。しかし、あなたが望むものは一般的な方法では可能ではないと思います。 http://msdn.microsoft.com/en-us/library/ms973903.aspx –