有没有办法从.NET获取数据(C#5或更新,所以后异步/等待)执行等待执行的任务,以及类似的指标,用于诊断生产服务器发生的问题?
我正在讨论的案例是一个异步全能的系统(例如一个大规模并行套接字服务器,其中每个请求从一开始就是异步运行),其中初始任务产生多个任务,每个任务都需要时间来处理(或者每个启动更多任务),或者生成一些任务阻塞的任务(如第三方代码),其中一些正确地处理异步.我看到有两种情况难以有效诊断:
我已经尝试为此编写一个简单的测试,但没有明显的方法来限制执行程序的数量和我需要创建的任务数量来测试它使解析信息变得非常困难.通过尝试注销调试信息也很难不干扰测试本身.我会继续尝试创建一个更好的测试用例,并在需要时修改我的问题.
根据我对问题和异步任务系统的理解,这两者实际上是对实际运行任务的执行程序的争用.
第一种情况发生是因为创建的任务比实际完成的更多,在这种情况下,即使在负载足够高以锁定服务之前,待处理任务的计数器也可用于诊断它.
第二种情况发生是因为一组任务足够长而不会随着时间的推移而产生(有足够的负载)所有执行程序最终同时运行这些任务.一旦完成,它将处理一些任务,但很快就会被另一个长期运行的任务所取代.在这种情况下,挂起的任务计数器将是有用的,以及一些其他指标.
有什么类型可用,或者是否有一些未记录/ hacky方法将一些代码移植到应用程序中启动的每个任务的开始/结束,以使其注销/测量这些内容并在任务编号时发出警告正在爆炸?