【发布时间】:2015-06-06 15:12:29
【问题描述】:
我正在编写一个压力测试应用程序,我正在使用 FSharp.Data 来处理这样的 Http 请求......
let! x = Http.AsyncRequestString(url, httpMethod = "POST", headers = getHeaders, body = getFormVals, silentHttpErrors = true)
该行被执行了 100 次。
看看提琴手,我很快就耗尽了一些连接或线程池,大约 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返回一个与Task<string>非常相似的Async<string>。由于您忽略了它,因此异步代码永远不会运行。您可以运行它并像这样丢弃结果:Http.AsyncRequestString(...) |> Async.StartAsTask |> ignore,但是我怀疑这会解决您的问题,因为它仍然会等待每个请求的响应。
标签: f# stress-testing f#-data