5

インターネットから Web ページを取得する次の F# プログラムがあります。

open System.Net

[<EntryPoint>]
let main argv = 
    let mutable pageData : byte[] = [| |]
    let fullURI = "http://www.badaddress.xyz"
    let wc = new WebClient()
    try
        pageData  <- wc.DownloadData(fullURI)
        ()
    with
    | :? System.Net.WebException as err -> printfn "Web error: \n%s" err.Message
    |  exn -> printfn "Unknown exception:\n%s" exn.Message

    0 // return an integer exit code

これは、URI が有効、マシンがインターネットに接続されていて、Web サーバーが適切に応答するなどの場合に正常に機能します。理想的な関数型プログラミングの世界では、関数の結果は、引数として渡されない外部変数 (副作用) に依存しません。

私が知りたいのは、関数が回復可能な外部エラーを処理する必要がある操作を処理するための適切な F# 設計パターンは何かということです。たとえば、Web サイトがダウンしている場合は、5 分間待ってから再試行することをお勧めします。再試行回数や再試行間の遅延などのパラメーターを明示的に渡す必要がありますか、またはこれらの変数を関数に埋め込んでも問題ありませんか?

4

1 に答える 1