F# 强制销毁订阅事件的对象
让我们看看下面的代码:F# 强制销毁订阅事件的对象,f#,F#,让我们看看下面的代码: type EventSource () = let myEvent = Event<DateTime>() do let timer = new Timers.Timer() timer.Elapsed.Add (fun _ -> myEvent.Trigger DateTime.UtcNow) timer.Interval <- TimeSpan.FromSeconds(1.).
type EventSource () =
let myEvent = Event<DateTime>()
do
let timer = new Timers.Timer()
timer.Elapsed.Add (fun _ -> myEvent.Trigger DateTime.UtcNow)
timer.Interval <- TimeSpan.FromSeconds(1.).TotalMilliseconds
timer.Enabled <- true
timer.Start()
member this.OnEvent() =
myEvent.Publish
type DoStuff (eventSource: EventSource) =
// sometimes this object will self terminate its activity
do
eventSource.OnEvent().Add(fun t -> printfn "I got the time: %A" t)
type DoStuffController () =
let mutable activeObject : DoStuff option = None
let eventSource = EventSource()
member this.Start () =
activeObject <- Some (DoStuff(eventSource))
member this.Stop () =
-> destroy active object here
activeObject <- None
类型EventSource()=
让myEvent=Event()
做
let timer=新定时器。timer()
timer.appeased.Add(乐趣->myEvent.Trigger DateTime.UtcNow)
timer.Interval您可以使用IDisPobles:
类型DoStuff(eventSource:eventSource)=
让我们分享=
eventSource.OnEvent()
|>可观察。订阅(printfn“我得到时间:%A”)
接口IDisposable与成员t.Dispose()=disp.Dispose()
类型dostuff控制器()=
让可变activeObject:DoStuff选项=无
让eventSource=eventSource()
放过=
activeObject |>Option.iter(趣味ds->(ds:>IDisposable.Dispose())
此成员。开始()=
清除()
activeObject您可以使用IDisTables:
类型DoStuff(eventSource:eventSource)=
让我们分享=
eventSource.OnEvent()
|>可观察。订阅(printfn“我得到时间:%A”)
接口IDisposable与成员t.Dispose()=disp.Dispose()
类型dostuff控制器()=
让可变activeObject:DoStuff选项=无
让eventSource=eventSource()
放过=
activeObject |>Option.iter(趣味ds->(ds:>IDisposable.Dispose())
此成员。开始()=
清除()
activeObject是可观察的,类似于事件,因为一个回调必须完成,下一个回调才能通过?或者多个事件可以同时触发多个回调(需要一个锁)我从未使用过Observable,但我相信这种行为会让多个事件同时使用。我只是做了一些测试,就是这样。此外,锁也不会有帮助,因为在对象被释放后,在锁后面排队的事件仍然可以执行,这与事件相似,因为一个回调必须完成,下一个回调才能通过?或者多个事件可以同时触发多个回调(需要一个锁)我从未使用过Observable,但我相信这种行为会让多个事件同时使用。我只是做了一些测试,就是这样。此外,锁也不会有帮助,因为在释放对象之后,在锁后面排队的事件仍将执行