【发布时间】:2015-03-31 11:19:52
【问题描述】:
我是编程新手,F# 是我的第一语言。
以下是我的代码的相关部分:
open System.IO
open System.Net
let downloadHtmlFromUrlAsync (url: string) =
async {
let uri = new System.Uri(url)
let webClient = new WebClient()
let! html = webClient.AsyncDownloadString(uri)
return html
}
let downloadHtmlToDisk (url: string) (directoryPath: string) =
if isValidUrl url then
let name = getNameFromRedirectedUrl url
let id = getIdFromUrl url
let html = downloadHtmlFromUrlAsync url
let newTextFile = File.Create(directoryPath + "\\" + id.ToString("00000") + " " + name.TrimEnd([|' '|]) + ".html")
use file = new StreamWriter(newTextFile)
file.Write(html)
file.Close()
let downloadEntireDatabase (baseUrl: string) (totalNumberOfPeople: int) =
let allIds = [ for i in 1 .. totalNumberOfPeople -> i ]
allIds
|> Seq.map (fun id -> baseUrl + string(id))
|> Seq.filter isValidUrl
|> Seq.map downloadHtmlToDisk
|> Async.Parallel
|> Async.RunSynchronously
我已经在 F# 交互中测试了函数 isValidUrl、getNameFromRedirectedUrl、getIdFromUrl。它们工作正常。
我的问题是:当我尝试运行上面粘贴的代码时,会产生以下错误消息:
Program.fs(483,8):错误 FS0193:类型约束不匹配。方式
seq<(string -> unit)>与类型不兼容seq<Async<'a>>类型Async<'a>与string -> unit类型不匹配
出了什么问题?我应该做出哪些改变?
【问题讨论】:
-
至少在哪里:
downloadFighterHtmlToDisk?
标签: asynchronous f#