Я написал функцию для инициирования загрузки по URL-адресу и объекту WebClient в F #.Тем не менее, когда я пишу свой оператор try .. with, он выдает ошибку «Неполная структурированная конструкция в этой точке выражения или перед ней».
let urlDownload(url:string, webClient:WebClient) =
async {
try
let uri = new Uri(url)
/// References for progress queries
let contentLength = ref 0L
let bytesReceived = ref 0L
/// Updates progress statistics as progress is made
webClient.DownloadProgressChanged.Add(
fun args ->
if !contentLength = 0L && webClient.ResponseHeaders.Get "Content-Length" <> null then
contentLength := webClient.ResponseHeaders.Get "Content-Length" |> Int64.Parse
bytesReceived := !bytesReceived + args.BytesReceived
)
let! html = webClient.AsyncDownloadString(uri)
with
| :? UriFormatException -> printfn "Invalid URL"
}
Он основан на коде из MSDN здесь
Что действительно странно, так это то, что если я поставлю printfn перед блоком withкомпилируется без ошибок.Однако, когда я запускаю его, он генерирует исключение UriFormatException, которое предположительно должно быть перехвачено блоком with.