.NET Core — ป้องกันการ Overlap ของ Timer (F#)

ให้เรียกฟังก์ชั่น Timer.Change() ในฟังก์ชั่น handler ซึ่งจะทำให้ timer รีเซ็ตตัวเองทุกครั้ง หลังจากโปรเซสงานเสร็จ โดยต้องเซ็ต period ให้นานที่สุดเพื่อป้องกันไม่ให้ callback ถูกเรียกซ้ำขณะที่ฟังกชั่น handler กำลังทำงานอยู่

open System.Threading
let mutable timer: Timer = null
let zero = TimeSpan.FromSeconds(0.1)
let next = TimeSpan.FromSeconds(5.0)
let period = TimeSpan.FromSeconds(10000.0)
let handler(obj) =
... long running task
timer.Change(next, period) |> ignore
let callback = TimerCallback(handler)
timer <- new Timer(callback, "", zero, period)
Show your support

Clapping shows how much you appreciated wk’s story.