并行/异步处理函数并附加结果,返回一个结果列表?

时间:2014-06-05 18:55:52

标签: f# html-agility-pack c#-to-f#

我有一个返回字符串[]的函数。

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

1 个答案:

答案 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[][]