Вы можете сделать это с помощью асинхронных рабочих процессов F # и распараллелить ваши запросы, используя Async.Parallel
. Вам также необходимо установить ограничение числа параллельных подключений .NET, которое оно позволяет, чтобы фактически обеспечить более высокий уровень параллелизма. Как то так:
open System
open System.Net
ServicePointManager.DefaultConnectionLimit <- 20
let checkUrl url =
async {
let req = WebRequest.Create(Uri(url))
req.Proxy <- null
req.Method <- WebRequestMethods.Http.Get
use! resp = req.AsyncGetResponse()
printfn "Downloaded: %s" url
return resp.ContentLength }
[ for i in 0 .. 100 -> checkUrl (sprintf "http://www.google.com?%d" i) ]
|> Async.Parallel
|> Async.RunSynchronously