【发布时间】:2011-08-18 06:37:31
【问题描述】:
我的情况类似于以下:
let mutable stopped = false
let runAsync() = async {
while not stopped do
let! item = fetchItemToProcessAsync
match item with
| Some job -> job |> runJobAsync |> Async.Start
| None -> do! Async.Sleep(1000)
}
let run() = Async.Start runAsync
let stop() =
stopped <- true
现在,当调用 stop 方法时,我必须停止从数据库中读取更多项目,并等待当前启动的项目完成,然后再从该函数返回。
实现这一目标的最佳方法是什么?我正在考虑使用一个计数器,(使用互锁的 API)并在计数器达到 0 时从 stop 方法返回。
如果有其他方法可以做到这一点,我将不胜感激。我有一种感觉,我可以在这里使用代理,但我不确定是否有任何可用的方法可以使用代理完成此操作,或者我是否仍需要编写自定义逻辑来确定作业已完成执行。
【问题讨论】:
标签: asynchronous f# agent