【问题标题】:How to get Async Values from within Seq.map in F#如何从 F# 中的 Seq.map 中获取异步值
【发布时间】:2021-10-26 20:45:18
【问题描述】:

使用以下代码 - 我正在使用 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")))

【问题讨论】:

  • 您需要它们并行还是顺序运行?

标签: f# playwright-sharp


【解决方案1】:

要执行一系列异步计算并获取其结果,请分别使用Async.SequentialAsync.Parallel 进行顺序或并行执行。

这两种方法都将asyncs 序列作为参数,并将其结果作为数组返回。这两种方法都保证数组中结果的顺序与序列中异步计算的顺序相同。

let! lines = Async.AwaitTask(page.QuerySelectorAllAsync("#statementLines>div"))
let! values = 
  lines 
  |> Seq.map (fun line -> Async.AwaitTask (line.GetAttributesAsync("data-statementlineid")))
  |> Async.Sequential

【讨论】:

  • 谢谢.. 觉得这可能很简单!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2021-04-18
  • 2021-10-14
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多