Я хочу иметь возможность измерить время, необходимое для выполнения асинхронного метода.
Когда я вызываю метод синхронно, я запускаю следующий код и получаю точное количество времени, необходимое для метода MyMethod.
for (int i = 0; i < 5000; i++) {
stopWatches[i].Start();
webService.MyMethod(new Request());
stopWatches[i].Stop();
}
Я изменил свой код для асинхронного выполнения MyMethod, поэтому теперь мой код выглядит следующим образом.
var callback = new Action<IAsyncResult>(ar => {
int i = (int)ar.AsyncState;
try {
var response = webService.EndMyMethod(ar);
stopWatches[i].Stop();
}
}
for (int i = 0; i < 5000; i++) {
webService.BeginMyMethod(new Request(), new AsyncCallback(callback), i);
stopWatches[i].Start();
}
Проблема в том, что секундомеры больше не измеряют время, необходимое для выполнения запроса. Они измеряют время с момента, когда запрос поступил в очередь ThreadPool, до окончания вызова. В итоге я получаю список секундомеров с линейным увеличением времени.
Как мне починить секундомеры? Есть ли способ точно узнать, когда начинается запрос?
Спасибо!
ОБНОВЛЕНИЕ: я не могу изменить реализацию MyMethod.