我正在編寫一個多線程應用程序,其中一部分代碼必須是線程安全的以便跟蹤任務編號。跟蹤多線程應用程序中的任務號
我有這樣的方法:
private void IncrementTaskNumber() {
Interlocked.Increment(ref _TaskNumber);
}
_TaskNumber是在同一個類中的私人詮釋。問題是,這會引發我一個「屬性,索引器或動態成員訪問可能不會作爲out或ref參數傳遞」異常。 爲了解決這個問題,我做的:
private void IncrementTaskNumber() {
int _taskNum = _TaskNumber;
Interlocked.Increment(ref _taskNum);
_TaskNumber = _taskNum;
}
這仍然是線程安全的?
請顯示'_TaskNumber'的聲明。鑑於錯誤消息,它聽起來像它被定義爲類似'private int _TaskNumber {get;組; } - 是正確的嗎? –
@Reed Copsey,yes private int _TaskNumber {get;設置;} – ThomasVestergaard
你需要使用一個字段,而不是一個私人財產 - 請參閱我的答案瞭解詳情。 –