确定方法使用的线程数

时间:2014-08-14 18:50:55

标签: c# asp.net multithreading

我有一个看起来像这样的方法:

public void DoLotsOfWork()
{
   Task.Factory.StartNew(() => SomeMethod1());

   Task.Factory.StartNew(() => SomeMethod2());

   Task.Factory.StartNew(() => SomeMethod3());    
}

这些任务反过来调用其他方法,有些使用Parallel.Invoke,有些则创建其他Tasks。有没有办法知道这个方法运行时有多少并发线程在运行?

感谢。

1 个答案:

答案 0 :(得分:1)

我过去使用的一种快速方法是在父级中创建一个整型变量或属性,并使用SomeMethod1,2& 3包括对Interlocked.Increment(intProperty)的调用;在开始时,在finally块中调用Interlocked.Decrement(intProperty)。您可以使用该属性来检查当前运行的线程数。

你的课程看起来像这样:

public class MyThreadingClass
{
   int threadCount = 0;
   public void DoLotsOfWork()
   {
      Task.Factory.StartNew(() => SomeMethod());
   }
   public void SomeMethod()
   {
      Interlocked.Increment(threadCount);
      try
      {
         // Some Code
      }
      finally
      {
         Interlocked.Decrement(threadCount);
      }
   }
}