Próbuję użyć asynchronicznych przepływów pracy w F #, aby pobrać kilka żądań internetowych.F # asynchroniczne żądanie sieciowe, obsługa wyjątków
Jednak niektóre z moich żądań są czasami zwróconymi błędami (np. Http 500) i nie wiem, jak sobie z tym poradzić. Wygląda na to, że mój program F # utknął w nieskończonej pętli podczas działania w debugerze.
Prawdopodobnie brakuje mi niektórych rzeczy, bo przykłady, które widziałem, nie zostały skompilowane po wyjęciu z pudełka. Pierwszą rzeczą, jaką okazało się, że było to trochę pomogło kodu:
type System.Net.WebRequest with
member req.GetResponseAsync() =
Async.BuildPrimitive(req.BeginGetResponse, req.EndGetResponse)
a potem mam bitowy kod, aby pobrać wnioski, co jest dość standardowy z przykładów widziałem:
let async_value = async {
let req = WebRequest.Create(url)
let! rsp = req.GetResponseAsync()
return (rsp :?> HttpWebResponse).StatusCode
}
a następnie staram się uzyskać wynik:
let status = Async.RunSynchronously(async_value)
Ale gdy uruchomię mój program w debugger, to rozkłada się req.EndGetResponse
ponieważ serwer zwrócił wewnętrzny błąd serwera 500. Gdybym tylko utrzymać stałą wykonanie dane Wchodzi w funky loop, łamiąc na req.EndGetResponse
(czasami kilka z rzędu), a na status = Async.RunSynchronously
niech (async_value).
Jak obejść problem wyjątku, aby uzyskać kod statusu? Poza tym, czy potrzebuję czegoś, co zrobiłem powyżej? Czy może brakuje mi biblioteki/biblioteki dll dla F #/VS 2010 Beta 1, której jest już częścią?
Właściwie uruchamiam kilka żądań równolegle, używając Async.RunSynchronously
(Async.Parallel
(my_array_of_async_values)), ale nie sądzę, że jest to związane z problemem wyjątku, który mam.
Fakt przykłady Natknąłem używać tylko Async.Run
zamiast Async.RunSynchronously
jest prawdopodobnie wskaźnikiem Ja czegoś brakuje ... =/
Tak, widzę, co zrobiłem źle. Było to również zachowanie częściowe (vers2010b1) dotyczące wyjątkowych błędów debugowania. Próbowałem po prostu uzyskać kod stanu, jedyną część odpowiedzi, o którą się troszczyłem, bez obsługi wyjątku. – jessicah