如何获取当前正在执行的任务的堆栈跟踪?

时间:2015-01-28 20:04:04

标签: c# .net stack-trace

每次有关应用程序的新事件到达时,我都会调用一个方法。此方法会启动一个新任务来处理事件,以便我们可以快速返回。例如:

public void HandleEvent(Event e)
{
  Task.Run(() => 
  {
    // Do something with e
  }
}

有时处理该事件需要很长时间,我想找出原因。我正在考虑这样做的一种方法是跟踪所有当前正在执行的此类任务,并创建一个监视线程,以监视花费超过一定时间的任何任务。当发生这种情况时,让监视器对该任务的线程进行堆栈跟踪。

这可能吗?

我认为,如果获得正在运行的线程的堆栈跟踪是不可能的或者太困难,我可能会以某种方式从外部触发ProcDump,尽管这样做太过分了,并且可能会抓取大量数据。需要。 (这是一个服务器进程,因此我预计会有数百个(如果不是数千个)处理线程。)

提前致谢,

0 个答案:

没有答案