我正在编写一个压力测试应用程序,使用FSharp.Data处理Http请求如下...
let! x = Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true)
那行代码会被执行数百次。
查看 Fiddler,我很快就会耗尽某些连接或线程池,大约有30个请求会同时发出。之后,应用程序开始变慢,请求的吞吐量似乎与我正在访问的 URI 的响应能力有关。当一个200返回时,另一个请求就会发出。
包含该函数的是一个async{}
块(因此使用了let!)。
我想要做的是完全忽略响应,但如果我将该行更改为...
Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true) |> ignore
...没有任何请求被分派。我不知道为什么会这样。
我对F#相对较新,对这个特定的库 (http://fsharp.github.io/FSharp.Data/library/Http.html) 也非常新。是否有任何选项可以指示库忽略响应并避免阻塞,或者我可以使用语言做些什么来帮助?
Http.AsyncRequestString
返回一个Async<string>
,它非常类似于Task<string>
。由于您忽略了它,异步代码永远不会运行。您可以像这样运行它并丢弃结果:Http.AsyncRequestString(...) |> Async.StartAsTask |> ignore
,但我怀疑这不会解决您的问题,因为它仍然会在每个请求上等待响应。 - Daws