我有一个看起来像这样的方法:
public void DoLotsOfWork()
{
Task.Factory.StartNew(() => SomeMethod1());
Task.Factory.StartNew(() => SomeMethod2());
Task.Factory.StartNew(() => SomeMethod3());
}
这些任务反过来调用其他方法,有些使用Parallel.Invoke
,有些则创建其他Tasks
。有没有办法知道这个方法运行时有多少并发线程在运行?
感谢。
答案 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);
}
}
}