热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这是异步流水线操作员吗?

如何解决《这是异步流水线操作员吗?》经验,为你挑选了1个好方法。

如果我们定义这样的|>!运算符怎么办:

let (|>!) a f = async {
    let! r = a
    return f r
} 

然后而不是写作

let! r = fetchAsync()
work r

我们可以写

fetchAsync() |>! work

这是一个好主意还是会产生效率低下的代码?



1> rmunn..:

|>!您正在描述的运算符是标准的"映射"模式,它可以应用于几乎任何 "包装"类型,而不仅仅是async.如果你return f r曾经return! f r那么你会有标准的"绑定"模式,>>=如果你为它定义一个运算符,按照惯例应该写成运算符.

这是一个好主意,但只有一个小小的改变.您使用async值作为第一个参数并将函数作为第二个参数编写,但是您使用它的方式fetchAsync() |>! work要求函数是第一个参数,例如let (|>!) f a = ....(如果你顺便看看斯科特Wlaschin实现了这个在我联系的第一个例子,他把函数作为第一个参数为好.)另外,我想大多数F#程序员会选择不写这个作为一个经营者,而是作为一个函数调用Async.map,以便它的用法如下所示:

let result =
    fetchAsync()
    |> Async.map step1
    |> Async.map step2
    |> Async.map step3


推荐阅读
author-avatar
凡秘能
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有