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吗?或者我应该在每个和块中使用locking吗?getset
我认为这应该是非常常见的场景 - 使属性(最好是自动属性)线程安全。请注意,此示例中的所有属性都是原子类型。
编辑:
为了澄清我需要什么:我需要确保所有线程始终读取属性的最新值。看到这个:https ://stackoverflow.com/a/10797326/1081467
再说一遍,您是否建议使用volatile、 或locking 或其他任何东西?.. 当使用bool属性原子性得到保证时,只剩下第二个问题(读取最新值),那么您如何正确解决这个问题? 当你有非原始类型的属性时怎么办?你lock在每个get和set块中都放了 s 吗?