コードは次のようになります。
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) がおそらく機能するかどうかを知りたい
ありがとう。