F#で非同期ワークフローを使用して、いくつかのWebリクエストをフェッチしようとしています。F#非同期Webリクエスト、例外処理
私のリクエストの中には、エラー(例:http 500)が返されることがありますが、これを処理する方法がわかりません。私のF#プログラムがデバッガで実行されているときに無限ループに陥るように見えます。
私はおそらくいくつかのものが不足している、私が見た例は、ボックスをコンパイルしなかった。私はこのコードのビットだった助けたその最初に見つかったもの:
type System.Net.WebRequest with
member req.GetResponseAsync() =
Async.BuildPrimitive(req.BeginGetResponse, req.EndGetResponse)
、その後、私は私が見てきた例からかなり標準である、要求をフェッチするために、コードの私のビットを持っている:
let async_value = async {
let req = WebRequest.Create(url)
let! rsp = req.GetResponseAsync()
return (rsp :?> HttpWebResponse).StatusCode
}
let status = Async.RunSynchronously(async_value)
しかし、私は、デバッガで私のプログラムを実行すると、私はちょうど継続execuを続ける場合は、サーバーが内部サーバーエラー500を返したため、それが
req.EndGetResponse
で壊し:その後、私は結果を取得しようそれは、
req.EndGetResponse
(時には複数の行で)で破損し、let
status = Async.RunSynchronously
(async_value)で破損しています。
ステータスコードを取得できるように、例外の問題を回避するにはどうすればよいですか?また、私は上記のタイプのものが必要ですか?または、F#/ VS 2010 Beta 1のライブラリ/ DLLがなくなっていますが、これは既に一部ですか?
Async.RunSynchronously
(Async.Parallel
(my_array_of_async_values))を使用して実際に複数のリクエストを実行していますが、それは私が持っている例外の問題とは関係ありません。
私は遭遇してきた例はAsync.Run
ではなくAsync.RunSynchronously
を使用するという事実は、おそらく私は何かが欠けてい指標である... =/
はい、私は私が間違って行っていたものを参照してください。例外デバッグの奇妙さに関するツールビヘイビアの一部(vs2010b1)でもありました。 私は、例外を処理することなく、私が気にしていた応答の唯一の部分であるStatusCodeを取得しようとしました。 – jessicah