Asynchronous 组合F#异步函数
我在这里有点沮丧。我知道我有所有的比特,但我不知道如何组合它们Asynchronous 组合F#异步函数,asynchronous,f#,Asynchronous,F#,我在这里有点沮丧。我知道我有所有的比特,但我不知道如何组合它们 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 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
让saveImageToDisk路径内容=
异步的{
使用s=newfilestream(路径,FileMode.OpenOrCreate)
do!s.AsyncWrite(内容)
printfn“完成写入%A”路径
}//返回异步
让GetImagesImageURL=
图像URL
|>Seq.map(趣味url->topath url,getImage url)
//下一行不满意,因为内容是异步的,而不是字节[]
|>Seq.map(乐趣(路径、内容)->saveImageToDisk路径内容)
|>异步并行
|>异步运行
您可以使用async
表达式将两者结合起来:
let getImages imageUrls =
imageUrls
|> Seq.map (fun url -> async {
let! content = getImage url
return! saveImageToDisk (topath url) content })
|> Async.Parallel
|> Async.RunSynchronously
基本上,由于Async是一个单子,您可以在另一个Async中组合这两个单子: