如何在F#中创建一个空的catch块(或忽略所有异常)?
我正在研究创建SQL Server数据库和架构的代码。这是一个示例:
let run (ipAddress : string) (port : int) (userName : string) (password : string) =
let mutable maxTime = 0
let mutable succeeded = false
while not succeeded do
try
if maxTime > 120 then
failwith "Unable to initialize SQL Server database in two minutes."
Thread.Sleep(TimeSpan.FromSeconds(5.0))
maxTime <- maxTime + 5
let con = new ServerConnection
(sprintf "%s,%i" ipAddress port, userName, password)
let server = new Server(con)
let db = new Database(server, "mydb")
db.Create()
let schema = new Schema(db, "myschema")
schema.Create()
succeeded <- true
with
// what goes here as the equivalent of: catch { }
如果遇到数据库不可用的异常情况,我只想忽略它并继续前进;该数据库位于Docker容器中,因此有时启动起来很慢。
但是在F#中执行此操作的语法是什么?
答案 0 :(得分:4)
在F#中,try .. with ..
是一个表达式,可以对其所包含的一个表达式的结果表示怀疑。在命令式代码中,这些分支的结果为unit
类型的值,您可以将其写为()
。
因此,在您的示例中,with
的{{1}}分支需要返回一个单位值-您可以使用类似以下内容的代码编写该代码:
try .. with ..