如何validation我的async / await是否正在使用I / O完成端口?

我目前正在将数据库存储过程调用转换为异步,利用async / await。 与此处描述的方法类似。

基于这个答案 ,我想validation异步调用实际上是否正在使用I / O完成端口。 如果它最终等待来自ThreadPool的另一个线程,那么它实际上是在破坏转换呼叫的目的。

validation正在使用I / O完成端口的最佳方法是什么?它不仅仅是阻塞另一个线程?

同时调用WAITFOR DELAY '1:00:00'次。 如果使用的线程少于1000个,那么您将获得无线程IO。 您应该看到几十个(其中包括许多由运行时和框架启动的实用程序线程)。

您还可以打破调试器并确保当前没有线程正在等待IO。 你可以从堆栈跟踪中看出来。 这适用于任何现有的应用程序。

我会创建一些perfmon计数器并在线程池线程中更新它们。 然后,您可以观看正在使用的应用程序,并查看在任何给定时间正在使用的线程数,这反过来可能会帮助您调整数量。 您还可以记录每个线程所花费的时间,并计算一下,以便您可以看到平均等待时间,这可以帮助您确定它们是否被阻止,但我认为线程的数量也会显示出来 – 因为您如果他们互相等待,请立即看几个完整的。 取决于你正在做的工作。

我在几年前做了一个网络应用程序,它对性能调整应用程序非常有用。