我试图使用异步工作流在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)
但是当我在调试器中运行我的程序,它在req.EndGetResponse
打破,因为服务器如果我只保留继续execu返回内部服务器错误500。重刑,它得到的一个时髦的循环,在req.EndGetResponse
突破(有时连续几个),并让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 2009-09-09 03:47:26