Как сделать пустой блок catch с помощью F #? - PullRequest
0 голосов
/ 30 апреля 2019

Как мне создать пустой блок catch (или игнорировать все исключения) в F #?

Я работаю над кодом, который создает базу данных и схему 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 #?

1 Ответ

4 голосов
/ 30 апреля 2019

В F # try .. with .. - это выражение, которое оценивается как результат одного из содержащихся в нем выражений.В императивном коде результатом этих ветвей является значение типа unit, которое можно записать как ().

Так что, в вашем примере, with ветвь try .. with .. должнавернуть значение единицы - вы можете написать это, используя что-то вроде:

let run (ipAddress : string) (port : int) (userName : string) (password : string) =
    let mutable maxTime = 0
    let mutable succeeded = false
    while not succeeded do
        try
            // all code omitted
        with _ ->
            ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...