ca9*_*3d9 1 f# computation-expression
例如,我有一个日志记录工作流程,我想在日志记录工作流程中使用async.如何bind
在异步工作流程中调用日志记录?
log {
async {
let! a = .... // Need to do logging here.
let! b = .... // Need to do async here
Run Code Online (Sandbox Code Playgroud)
编辑:我听说在F#中使用工作流代替AOP以实现横切关注目的是个好主意.我不知道如何处理嵌入问题.或者使用工作流程不是一个好主意?
F#没有任何自动执行此操作的方法.你真正想要的是创建一个捕获两种不同行为的组合计算.执行此操作的最佳方法是定义一个新计算,例如asyncLog
,可以让您执行所需的两项操作.这并不容易,但以下是很好的起点:
asyncSeq
计算了如何创建异步序列在现实中,你不需要做这个是在F#的时候,因为没有那么多的计算表达式组成.
在您的示例中,您正在使用async
和log
.虽然在解释计算表达式如何工作时,日志记录是一个很棒的演示,但我不确定我是否会在实践中使用计算表达式向我的应用程序添加日志记录 - 使用全局记录器对象并直接调用它似乎更容易(但是它实际上取决于你的log
计算在封面背后做了什么).