您如何确定异步/等待执行的是什么?

时间:2018-07-31 20:00:28

标签: c# .net asynchronous async-await windbg

鉴于async / await并不是固有地创建线程,并且等待的I / O操作是在线程上下文之外完成的,那么如何确定当前正在执行的操作呢?

为了进行实验,我组装了一个小型测试应用程序,它将启动1个长时间运行的IO操作并等待它。我运行测试程序,并在长时间运行的IO操作中创建了一个转储文件,并使用DIEGO检查了线程。在线程堆栈中的任何地方都没有(至少对我来说)清楚那个等待的调用。我没有看到任何.Net代码,也没有看到我正在调用的库的任何类引用(在本例中为Amazon)。

我尝试了同样的事情,但是同时触发了3个长时间运行的IO操作并等待它们。我创建了另一个转储文件。我的线程和堆栈跟踪看起来几乎相同。

如何调试这种情况?当我的应用程序就其线程的调用堆栈而言基本上看起来像空闲时,我如何确定当前正在“运行”什么?我想出的最接近的解决方案是检查堆,寻找我知道将在等待的操作期间分配的对象,并查看有多少对象存在。 (即3个ALLURE对象等)

当然有更好的方法了!

0 个答案:

没有答案