f# - 如何从 F# 中的 Seq.map 中获取异步值
问题描述
使用以下代码 - 我正在使用 Microsoft.Playwright 来抓取网页。
第一行返回 System.Collections.Generic.IReadOnlyList
我不确定如何正确获取第二行,因为它需要在每一行上执行异步(它目前不起作用)
let! lines = Async.AwaitTask(page.QuerySelectorAllAsync("#statementLines>div"))
let! values = lines |> Seq.map( fun line -> Async.AwaitTask(line.GetAttributeAsync("data-statementlineid")))
解决方案
要执行一系列异步计算并获得其结果,请分别使用Async.Sequential
orAsync.Parallel
用于顺序或并行执行。
这两种方法都将async
s 序列作为参数,并将其结果作为数组返回。这两种方法都保证数组中结果的顺序与序列中异步计算的顺序相同。
let! lines = Async.AwaitTask(page.QuerySelectorAllAsync("#statementLines>div"))
let! values =
lines
|> Seq.map (fun line -> Async.AwaitTask (line.GetAttributesAsync("data-statementlineid")))
|> Async.Sequential
推荐阅读
- django - Django中的文件上传没有在任何地方保存文件
- android - UISelector 使用 descriptionContains
- robotics - 如何在 pybullet 环境中调整对象的大小?
- oracle - 如何在数据库oracle中存储utl_http.req对象
- python - 操作数不能与神经网络中的形状 (216,1) (20,1) 一起广播
- authentication - 使用触发构建的用户从 Jenkins 运行批处理作业
- excel - 如何在 Excel 中的多个列上使用 OR 语句?
- html - 使图像适合自动网格
- mongodb - 容器中的 MongoDb ReplicaSet,可在桥接器和主机网络上访问
- flutter - 用户登录时的初始路由 Flutter