Я обычно пишу службы Windows на C #, но я делаю это на F #.Для опроса, как этот, я обычно использую класс, который я написал, который похож на BackgroundWorker
.Он порождает фоновый поток и запускает метод OnWork через равные промежутки времени.(Полный код здесь [github] .)
Есть ли другой, возможно, лучший или более идиоматический способ сделать это в F #?Это мог бы быть лучший способ написать рабочий класс фона или встроенные альтернативы ему.
РЕДАКТИРОВАТЬ
Вот что я придумал, основываясь на предложении Джоэла.1017 *
Служба, использующая poll
:
type MyService() =
inherit System.ServiceProcess.ServiceBase()
let mutable cts = new CancellationTokenSource()
let interval = 2000
override __.OnStart(_) =
let polling = Async.poll interval (fun () ->
//do work
)
Async.Start(polling, cts.Token)
override __.OnStop() =
cts.Cancel()
cts.Dispose()
cts <- new CancellationTokenSource()
override __.Dispose(disposing) =
if disposing then cts.Dispose()
base.Dispose(true)
Хотелось бы, чтобы был способ избежать изменяемого CancellationTokenSource
, но увы.