[F#] Запуск асинхронных задач с обработкой ошибок
От: cadet354 Россия
Дата: 16.06.10 12:43
Оценка:
Доброго времени,
есть список объектов с координатами для которых надо получить адрес, если его можно определить сервисом (геокодинг).
Список этих объектов довольно большой, хотелось бы обрабатывать асинхронно, с логированием того, что для этого объекта нет адреса (или сервис вернул ошибку).
Сделать асинхронный запрос благодаря многочисленным руководствам, не проблема:
async {
                let request = HttpWebRequest.Create(url)
                let! response = request.AsyncGetResponse()
                use response = response
                let stream = response.GetResponseStream()
                use reader = new StreamReader(stream)
                let! result=  reader.AsyncReadToEnd()
                return (id,result) (* id это id объекта, указывается выше по коду *)
                } 
                |>  Async.Catch
                |>  Async.RunSynchronously
                |>  function
                    | Choice1Of2 (id2,result2)     -> (id2,result2)
                    | Choice2Of2 (ex : exn) -> (id,ex.Message)

проблема в том, что Async.RunSynchronously так же как и Async.StartWithContinuations вызываются немедленно, а мне хотелось бы сформировать лист Async и потом их вызвать c помощью Async.Parallel
Как быть в этой ситуации?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.