在其他工作流程/ monad中嵌入工作流程/ monad?



2025-03-09 10:54:43 (21天前)
  1. 例如,我有一个


工作流程
</跨度>
用于日志记录,我想在日志记录中使用async

工作流程
</跨度>
。如何在异步中调用日志记录的绑定

工作流程
</跨度>

log {
异步{
让! a = …. //需要做 记录在这里。
让! b = …. //需要在这里做异步

编辑:我听说使用它是个好主意

工作流程
</跨度>
在F#中替换AOP以满足横切关注的目的。我不知道如何处理嵌入问题。或者使用它不是一个好主意

工作流程
</跨度>
为了它?

3 条回复
  1. 0# 取之 | 2019-08-31 10-32



    F#没有任何自动执行此操作的方法。你真正想要的是创建一个捕获两种不同行为的组合计算。这样做的最好方法是定义一个新的计算

    asyncLog

    ,这可以让你做你需要的两件事。这并不容易,但以下是很好的起点:




    实际上,您不需要这样做



    通常在F#中,因为没有那么多的计算表达式要编写。



    在您的示例中,您正在使用

    async



    log

    。虽然在解释计算表达式如何工作时,日志记录是一个很棒的演示,但我不确定我是否会在实践中使用计算表达式向我的应用程序添加日志记录 - 使用全局记录器对象并直接调用它似乎更容易(但是这真的取决于你的

    log

    计算在幕后做)。


  2. 1# 無口君 | 2019-08-31 10-32



    您可以使用AsyncReader计算表达式

    https://github.com/jack-pappas/ExtCore/blob/master/ExtCore/Control.fs#L1769

    如果需要,可以提升Asyncs和读者。


登录 后才能参与评论