在 F# 中,任务完成时获得通知的最佳方式是什么?
what is the best way to get notified when a task finishes, in F#?
我有一大堆任务,我正在尝试找出在任务完成时通过事件得到通知的最佳方式。
由于任务多种多样,我不想在任务本身中添加一段代码,因为那意味着将它放在几个地方。这些是很长的 运行 任务,我不是在等待他们在任何地方完成,他们只是开始,做他们的工作(几分钟到几天)然后他们完成。
丑陋但可行的解决方案是将每个工作任务包装到另一个等待工作任务完成的任务中,然后发送一个事件,但我希望会有更优雅的东西。
您在评论中解释说您是这样开始任务的:
Async.StartAsTask (runner.Start(), TaskCreationOptions.LongRunning, cancellationSource.Token)
与其那样做,不如这样启动它们:
startMyTask runner cancellationSource (fun() -> printfn "Task completed!")
其中:
let startMyTask (runner: RunnerType) (s: CancellationTokenSource) onDone =
let wrapper = async {
do! runner.Start()
onDone()
}
Async.StartAsTask (wrapper, TaskCreationOptions.LongRunning, s.Token)
我有一大堆任务,我正在尝试找出在任务完成时通过事件得到通知的最佳方式。
由于任务多种多样,我不想在任务本身中添加一段代码,因为那意味着将它放在几个地方。这些是很长的 运行 任务,我不是在等待他们在任何地方完成,他们只是开始,做他们的工作(几分钟到几天)然后他们完成。
丑陋但可行的解决方案是将每个工作任务包装到另一个等待工作任务完成的任务中,然后发送一个事件,但我希望会有更优雅的东西。
您在评论中解释说您是这样开始任务的:
Async.StartAsTask (runner.Start(), TaskCreationOptions.LongRunning, cancellationSource.Token)
与其那样做,不如这样启动它们:
startMyTask runner cancellationSource (fun() -> printfn "Task completed!")
其中:
let startMyTask (runner: RunnerType) (s: CancellationTokenSource) onDone =
let wrapper = async {
do! runner.Start()
onDone()
}
Async.StartAsTask (wrapper, TaskCreationOptions.LongRunning, s.Token)