代码如下所示:
public class JobManager
{
public static void TrackExceptionCount(ref int exceptionCount)
{
Interlocked.Increment(ref exceptionCount);
}
//other helper methods
}
我会在其他地方调用此方法,例如:
private static int _exceptionCount;
JobManager.TrackExceptionCount(ref _exceptionCount);
我认为Interlocked.Increment会处理线程安全问题,对吗?
编辑:
我有多个这样的Job类:
class JobA
{
private static int _exceptionCount;
public void method1()
{
Task.Factory.Start(()=>{
try
{
//Some code
}
catch(exception ex)
{
JobManager.TrackExceptionCount(ref _exceptionCount);
}
});
}
public void method2()
{
Task.Factory.Start(()=>{
try
{
//Some code
}
catch(exception ex)
{
JobManager.TrackExceptionCount(ref _exceptionCount);
}
});
}
}
class JobB
{
private static int _exceptionCount;
public void method1()
{
Task.Factory.Start(()=>{
try
{
//Some code
}
catch(exception ex)
{
JobManager.TrackExceptionCount(ref _exceptionCount);
}
});
}
public void method2()
{
Task.Factory.Start(()=>{
try
{
//Some code
}
catch(exception ex)
{
JobManager.TrackExceptionCount(ref _exceptionCount);
}
});
}
}
我相信直接调用catch块中的Interlocked.Increment可能是一种更好的方法。
但是仍然想知道JobManager.TrackExceptionCount(ref _exceptionCount)是否可能正常工作
感谢。
答案 0 :(得分:0)
假设您对Interlocked.Increment
的呼叫是存储位置_exceptionCount
的唯一用途,这是安全的。您可以安全地传递ref
个参数。它们的工作方式有点像变量的托管指针(内部,它们是)。