【发布时间】:2012-01-06 22:41:43
【问题描述】:
我正在尝试调试我的同事不在时编写的一些代码。
来电:
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 在我正在运行它的服务器上实际工作,并且它在我的小测试用例中正常工作,只是没有在我尝试调试的主应用程序中。
【问题讨论】: