由于未知的原因,我无法找出任何会返回错误而不会使代码崩溃的东西!
在 F# 中,
// 该函数可能会抛出错误(例如,文件路径可能不存在)。将其包含在外部异步块中以捕获错误。
let writeJsonAsync (r:Report[]) (file:string) =
async {
let json = Json.serialize r
let directory = Path.GetDirectoryName(file) // file is the absolute path.
if Directory.Exists directory
then
System.IO.File.WriteAllText(file, json) // creates a new file if the file is not created. It will overwrite the existing file.
else
raise <| DirectoryNotFoundException() <***--NO MATTER WHAT, THIS CRASHES!
}
// Save to local file with Json.
let saveReportConfigurationAsync (r:Report[], file:string) =
async {
let! foo =
async {
try
return! writeJsonAsync r file
with ex -> failwith "unreachable"
}
foo
}
非常感谢任何帮助。 TIA
Async.Catch
应该做你想做的事。如果计算成功完成,它将返回 Choice1Of2
以及返回值。如果计算在完成之前引发异常,那么它将返回 Choice2Of2
并引发异常:
let saveReportConfigurationAsync (r:Report[], file:string) =
Async.Catch(writeJsonAsync r file)