相关疑难解决方法(0)

F#中的"链接"异步函数

我在F#中创建了一个函数来从Yahoo恢复历史数据(F#的经典异步示例):

let getCSV ticker dStart dEnd =
async   {
        let query = getFileUrl ticker dStart dEnd
        let req = WebRequest.Create(query)
        use! resp = req.AsyncGetResponse()
        use stream= resp.GetResponseStream()
        use reader = new StreamReader(stream)
        let content = reader.ReadToEnd()
        let ts = parseData content
        return ts
        }
Run Code Online (Sandbox Code Playgroud)

现在,我可以通过执行以下操作异步运行此函数:

let test=
    ["MSFT";"YHOO"]
    |>List.map (fun x -> getCSV x (DateTime.Parse("01.01.2000")) (DateTime.Parse("01.01.2010")))
    |> Async.Parallel
    |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)

好,这很酷.

现在,我想知道的是如何应用一些功能,这是价格的历史:

例如:

let getReturns (prices:(DateTime *float)list) =
    [for i in 1..(prices.Length-1) -> i]
    |> List.map (fun i ->(fst (List.nth …
Run Code Online (Sandbox Code Playgroud)

.net f# asynchronous

4
推荐指数
1
解决办法
1656
查看次数

展平F#中的嵌套异步序列

考虑一系列F#序列:

let seqOf123 = seq { for i in 1..3 do yield i }
let seqOf456 = seq { for i in 4..6 do yield i }
let seqOf789 = seq { for i in 7..9 do yield i }
Run Code Online (Sandbox Code Playgroud)

......以及包含所有这些内容的序列:

let seqOfSeqOfNums = 
    seq {
        yield seqOf123
        yield seqOf456
        yield seqOf789
    }
Run Code Online (Sandbox Code Playgroud)

现在我们有一系列序列,我们可以使用内置的Seq.concat函数展平,并在async子句中包装以异步执行:

let firstAsyncSeqOfNums = async { return Seq.concat seqOfSeqOfNums }
Run Code Online (Sandbox Code Playgroud)

我们得到了一个由9个数字组成的异步序列,并带有一个签名Async<seq<int>>,我们将回过头来.

现在考虑一系列异步序列:

let asyncSeqOf123 = async { return seqOf123 }
let asyncSeqOf456 = async { …
Run Code Online (Sandbox Code Playgroud)

f# asynchronous sequence

3
推荐指数
1
解决办法
1005
查看次数

标签 统计

asynchronous ×2

f# ×2

.net ×1

sequence ×1