我的理解是,工作流构建器所做的是它首先“构建”表达式,然后执行它。所以假设它首先构建表达式,它应该能够let!
在实际执行之前计算语句的数量,对吧?然后它应该能够注入一些监控进度的日志记录?那么是否可以重新设计async
构建器以自动报告进度并消除printfn
下面的冗余?
async {
let! a = doSomething1 ()
printfn "%d/%d" 1 4
let! b = doSomething2 a
printfn "%d/%d" 2 4
let! c = doSomething3 b
printfn "%d/%d" 3 4
let! d = doSomething4 c
printfn "%d/%d" 4 4
return d
}
对于循环,我想只是假设整个循环是一个步骤。只有顶级表达式才算作此处的步骤。
(请注意,如果有一种方法可以在不制作全新的工作流程构建器的情况下做到这一点,我想这也很好)。
请注意,我已经经历了 a) 制作一个仅迭代任务的“任务”迭代器(但随后您会失去例如use
处理,因此它最终不够充分),以及 b) 制作一个任务计数器,但总是有手动播种和迭代,所以我希望有更好的东西。