F#没有任何自动执行此操作的方法。你真正想要的是创建一个捕获两种不同行为的组合计算。这样做的最好方法是定义一个新的计算 asyncLog ,这可以让你做你需要的两件事。这并不容易,但以下是很好的起点:
asyncLog
asyncSeq
实际上,您不需要这样做 那 通常在F#中,因为没有那么多的计算表达式要编写。
在您的示例中,您正在使用 async 和 log 。虽然在解释计算表达式如何工作时,日志记录是一个很棒的演示,但我不确定我是否会在实践中使用计算表达式向我的应用程序添加日志记录 - 使用全局记录器对象并直接调用它似乎更容易(但是这真的取决于你的 log 计算在幕后做)。
async
log
您可以使用AsyncReader计算表达式 https://github.com/jack-pappas/ExtCore/blob/master/ExtCore/Control.fs#L1769 如果需要,可以提升Asyncs和读者。