我一般是函数式编程的新手,最近开始学习 F#。我想使用异步工作流返回Async<'U option>
来选择序列中的项目。我找到了一个不错的Seq.pick
功能,但我不确定如何将它与异步工作流程一起使用。
如果这不可能,是否有另一种替代方法可以使用命令式样式程序从列表中选择项目。以下是我的程序的修改变体。任何反馈都非常感谢。
let run = async {
while not stopped do
use! resource = acquireResourceLockAsync
let! items = fetchItemsAsync 5
let! item = Seq.pick returnIfLocked items
let! status = performTaskAsync item
do! updateStatusAsync status
do! Async.Sleep 1000
}
感谢期待。
编辑:根据 jpalmer 的回答更新了我的问题。我注意到了这两个Seq.filter
和Seq.pick
更早的情况,并决定这Seq.pick
将更好地满足我的需求,因为我需要我能够锁定的第一个项目。但是,我忘记更改函数的返回值 - 而不是返回true
,它应该返回Some(item)
。现在有了这个更新,有没有一种优雅的方法来解决这个问题,而无需 1)阻塞要转换的线程Async<'U option>
和'U
2)诉诸命令式循环?