インターネットから 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 分間待ってから再試行することをお勧めします。再試行回数や再試行間の遅延などのパラメーターを明示的に渡す必要がありますか、またはこれらの変数を関数に埋め込んでも問題ありませんか?