我正在尝试调试我的同事不在时编写的一些代码。
这是电话:
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
异步方法内部有一个调用。它在一个while循环内,但我无法想象这会有所作为。
// internal to the method referenced above
result = await metricProcessor.ProcessItem(domain);
此外,我创建了一个小型测试应用程序,它运行一个非常简单的 async/await 设置,以确保 await 在我正在运行它的服务器上实际工作,并且它在我的小测试用例中正常工作,只是在主用例中没有我正在尝试调试的应用程序。