结合F#异步功能(Combining F# async functions)
我在这里有点沮丧。 我知道我已经掌握了所有的东西,但我无法弄清楚如何将它们结合起来......
let saveImageToDisk path content = async { use s = new FileStream(path, FileMode.OpenOrCreate) do! s.AsyncWrite(content) printfn "Done writing %A" path } // returns Async<unit> let getImages imageUrls = imageUrls |> Seq.map (fun url -> topath url, getImage url) //Next line not happy because content is Async<byte[]> instead of byte[] |> Seq.map (fun (path, content) -> saveImageToDisk path content) |> Async.Parallel |> Async.RunSynchronouslyI'm a bit frustrated here. I know I've got all the bits, but I can't work out how to combine them...
let saveImageToDisk path content = async { use s = new FileStream(path, FileMode.OpenOrCreate) do! s.AsyncWrite(content) printfn "Done writing %A" path } // returns Async<unit> let getImages imageUrls = imageUrls |> Seq.map (fun url -> topath url, getImage url) //Next line not happy because content is Async<byte[]> instead of byte[] |> Seq.map (fun (path, content) -> saveImageToDisk path content) |> Async.Parallel |> Async.RunSynchronously最满意答案
您可以使用async表达式将两者结合使用:
let getImages imageUrls = imageUrls |> Seq.map (fun url -> async { let! content = getImage url return! saveImageToDisk (topath url) content }) |> Async.Parallel |> Async.RunSynchronouslyYou can combine the two using the async expression:
let getImages imageUrls = imageUrls |> Seq.map (fun url -> async { let! content = getImage url return! saveImageToDisk (topath url) content }) |> Async.Parallel |> Async.RunSynchronously更多推荐
发布评论