BackgroundWorker
由于某种原因,我正在实施替换,我必须实施以下公共属性:
public bool CancellationPending { get; private set; }
public bool IsBusy { get; private set; }
public bool WorkerReportsProgress { get; set; }
public bool WorkerSupportsCancellation { get; set; }
我相信你知道它们的用途是什么BackgroundWorker
。因此它们可能会被不同的线程访问/修改。我担心如何“保护”它们以进行多线程处理。我认为声明它们volatile
就足够了,但volatile
不能应用于自动属性。
我该怎么办?我应该为这些属性创建私有字段并声明它们volatile
吗?或者我应该在每个和块中使用lock
ing吗?get
set
我认为这应该是非常常见的场景 - 使属性(最好是自动属性)线程安全。请注意,此示例中的所有属性都是原子类型。
编辑:
为了澄清我需要什么:我需要确保所有线程始终读取属性的最新值。看到这个:https ://stackoverflow.com/a/10797326/1081467
再说一遍,您是否建议使用volatile
、 或lock
ing 或其他任何东西?.. 当使用bool
属性原子性得到保证时,只剩下第二个问题(读取最新值),那么您如何正确解决这个问题? 当你有非原始类型的属性时怎么办?你lock
在每个get
和set
块中都放了 s 吗?