Я пытаюсь отладить код, который написал мой коллега, пока его нет.
Вот звонок:
var sw = Stopwatch.StartNew();
logger.Trace("Time A: {0}ms", sw.ElapsedMilliseconds); // Roughly 0ms
pt.Task = ProcessMetricsWorker(pt.CancelTokenSource);
sw.Stop();
logger.Trace("Time B: {0}ms", sw.ElapsedMilliseconds); // Over 20000ms!
Вот подпись метода:
async Task ProcessMetricsWorker(CancellationTokenSource cancelTokenSource)
Этот метод занимает около 20 секунд для запуска, и в соответствии с регистрацией, которую я помещаю непосредственно перед и после первой строки, указанной выше, задача выполняется синхронно, как если бы часть async
игнорировалась. Что могло бы вызвать это?
Обратите внимание, что внутри асинхронного метода есть вызов await
. Это внутри цикла, хотя я не могу себе представить, что это изменит ситуацию.
// internal to the method referenced above
result = await metricProcessor.ProcessItem(domain);
Кроме того, я создал небольшое тестовое приложение, которое запускает очень простую настройку async / await, чтобы убедиться, что await действительно работает на сервере, на котором я его запускаю, и работает правильно в моем небольшом тестовом примере, но не в основном приложении я пытаюсь отладить.