Ich versuche Async-Workflows in F # zu verwenden, um mehrere Webanforderungen abzurufen.F # asynchrone Webanforderung, die Ausnahmen behandelt
Einige meiner Anfragen geben jedoch gelegentlich Fehler (z. B. http 500), und ich weiß nicht, wie Sie damit umgehen. Es scheint, als ob mein F # -Programm in einer Endlosschleife stecken bleibt, wenn es im Debugger läuft.
Ich vermisse wahrscheinlich einige Sachen, weil Beispiele, die ich gesehen habe, nicht aus der Box kompilieren. Das erste, was ich gefunden, die half, war dieses Stück Code:
type System.Net.WebRequest with
member req.GetResponseAsync() =
Async.BuildPrimitive(req.BeginGetResponse, req.EndGetResponse)
und dann habe ich mein Stück Code, um die Anforderungen zu holen, die aus den Beispielen ist ziemlich Standard ich gesehen habe:
let async_value = async {
let req = WebRequest.Create(url)
let! rsp = req.GetResponseAsync()
return (rsp :?> HttpWebResponse).StatusCode
}
und dann versuche ich das Ergebnis zu erhalten:
let status = Async.RunSynchronously(async_value)
Aber wenn ich mein Programm in Debugger ausführen, bricht es bei req.EndGetResponse
weil Server interne Serverfehler zurückgegeben 500. Wenn ich einfach fort Execu Es kommt in eine funky Schleife, brechen bei req.EndGetResponse
(manchmal mehrere in einer Reihe), und lassen Sie status = Async.RunSynchronously
(async_value).
Wie kann ich das Ausnahmeproblem umgehen, damit ich meinen Statuscode bekommen kann? Brauche ich auch die Art, die ich oben getan habe? Oder fehlt mir eine Bibliothek/DLL für F #/VS 2010 Beta 1, von der dies bereits ein Teil ist?
Ich tatsächlich mehrere Anfragen parallel laufen, mit Async.RunSynchronously
(Async.Parallel
(my_array_of_async_values)), obwohl ich glaube nicht, dass das mit der Ausnahme Problem, das ich habe.
Die Tatsache, die Beispiele, die ich über nur Async.Run
anstatt Async.RunSynchronously
verwenden gekommen ist wahrscheinlich ein Indikator ich etwas fehlt bin ... =/
Ja, ich sehen, was ich falsch gemacht hatte. Es war auch Teil Tooling-Verhalten (vs2010b1) in Bezug auf die Exception Debugging Seltsamkeit. Ich hatte versucht, nur den StatusCode zu bekommen, der einzige Teil der Antwort, der mir sogar wichtig war, ohne die Ausnahme zu behandeln. – jessicah