我正在编写一个多线程应用程序,其中一部分代码必须是线程安全的才能跟踪任务编号。
我有这个方法:
private void IncrementTaskNumber() {
Interlocked.Increment(ref _TaskNumber);
}
_TaskNumber 是同一类中的私有 int。问题是,这会引发“A 属性、索引器或动态成员访问可能不会作为 out 或 ref 参数传递”异常。为了解决这个问题,我这样做:
private void IncrementTaskNumber() {
int _taskNum = _TaskNumber;
Interlocked.Increment(ref _taskNum);
_TaskNumber = _taskNum;
}
这仍然是线程安全的吗?