我有一个返回字符串[]的函数。
let asyncScrape url allParameters =
allParameters
|> Seq.map(fun v ->
yearAndClassResultsAsync url v)
|> Async.Parallel
|> Async.RunSynchronously
我想遍历该字符串数组,将每个字符串发送到一个名为resultsBody的方法(返回一个seq),然后最后返回一个单独的序列,它是resultsBody结果的串联。
我尝试过像下面这样的事情,但是我很遗憾地回来了:
seq<string[]>[]
我只想要一个组合
seq<string[]>
到目前为止我的尝试:
let parseSite html =
Array.mapi (fun s -> resultsBody) html
答案 0 :(得分:2)
简化,我认为您的问题是您有一个string
的嵌套序列,并且您希望获得尽可能多的并行性,而不是仅仅在嵌套的最内层。
您可以执行此操作的一种方法是在调用Async.Parallel
之前嵌套Async.RunSynchronously
次调用。这是一个简单的技术示例:
let squareInt n = async { return n*n }
let inParallel (seqOfseqOfInts : seq<seq<int>>) =
seqOfseqOfInts
|> Seq.map // deal with each inner seq of ints
(fun (seqOfInts : seq<int>) ->
seqOfInts
|> Seq.map squareInt
|> Async.Parallel // this gives us Async<int[]>
) // this gives us seq<Async<int[]>>
|> Async.Parallel // this gives us Async<int[][]>
|> Async.RunSynchronously // this gives us int[][]