【发布时间】:2013-08-17 18:02:46
【问题描述】:
我的理解是,工作流构建器所做的是首先“构建”表达式,然后执行它。所以假设它首先构建表达式,它应该能够在实际执行之前计算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) 制作一个任务计数器,但这总是必须手动播种和迭代,所以我希望有更好的东西。
【问题讨论】: