Events F中的线程安全选项#

Events F中的线程安全选项#,events,f#,thread-safety,Events,F#,Thread Safety,我正在尝试解决此问题(psdeudo代码): 及 国家可能会改变。有没有一个机制来处理这个问题? 像Option.TryGet那样以原子方式返回或不返回对象的东西 或者我还有其他的机制可以用吗 我想我可以尝试在try/with部分直接获取对象值,但我希望得到更干净的东西。将值从可变单元格中取出并保存在局部变量中,然后可以以线程安全的方式与局部变量交互: onEvent (fun t -> let v = myObject if v.IsSome then v.Value(

我正在尝试解决此问题(psdeudo代码):

国家可能会改变。有没有一个机制来处理这个问题? 像Option.TryGet那样以原子方式返回或不返回对象的东西

或者我还有其他的机制可以用吗


我想我可以尝试在try/with部分直接获取对象值,但我希望得到更干净的东西。

将值从可变单元格中取出并保存在局部变量中,然后可以以线程安全的方式与局部变量交互:

onEvent (fun t -> 
    let v = myObject
    if v.IsSome then v.Value(t)
)

这是因为
选项
值本身是不可变的。
myObject
的每个突变都会创建一个新的
选项
值,并使
myObject
引用它。读取引用是一个原子操作。

这似乎是一个使用锁的好地方。你能接受吗?@brianberns,这本可以奏效,但Fyodor的解决方案会更简单。
if myObject.IsSome
myObject.Value
onEvent (fun t -> 
    let v = myObject
    if v.IsSome then v.Value(t)
)