0

我想将我的 api 响应均衡到每次调用 2 秒。您认为这是正确的方法吗(vb.net 代码)...


Dim timeToSleep = 2000 - Date.Now.Subtract(start).TotalMilliseconds

''在这里执行的代码...

如果 timeToSleep > 0 则 Threading.Thread.Sleep(timeToSleep)


Threading.Thread.Sleep 功能是否仅阻止此 api 请求?如果其他人在 Sleep 函数执行时点击了 api 请求怎么办?

我应该这样做有更好的方法吗?

谢谢。

4

2 回答 2

0

Threading.Thread.Sleep 功能是否仅阻止此 api 请求?如果其他人在 Sleep 函数执行时点击了 api 请求怎么办?

请记住,虽然您可能会尝试通过使用睡眠来调整 api 调用的相对输出时间,但在考虑延迟、处理、其他导致慢/快响应时间的原因等因素时,它不会可靠地在该时间间隔内。

我应该这样做有更好的方法吗?

如果有的话,我会说微调您的 api 调用,使其尽可能快速和轻量级,然后在调用它时在客户端执行间隔。(除非我误解你为什么这样做。)

此外,您可能想研究一个长轮询解决方案。

于 2012-07-12T16:43:31.937 回答
0

虽然我认为这仅在测试场景(负载测试/用户接受测试)中有用,以模拟自然延迟,并且此代码永远不会接触生产,但这将起作用,您的呼叫将被延迟,而其他呼叫可以跑。问题是您阻塞了哪个线程:

如果您返回一个普通对象 或HttpResponseMessage,您的调用将阻塞 ASP.NET 的线程池,我认为在 IIS 7 中该线程池为 1000。任何更多请求,您的服务器都会返回 503 错误。

如果您返回 a Task<T>,那么您将阻塞 .NET 的 ThreadPool 线程 - 除非您指定使用另一个线程池的调度程序。此池中的线程数将在可以使用静态方法设置的最小值最大值之间波动ThreadPool

我的博客上有几篇关于这个主题的文章。

于 2012-07-12T18:03:18.317 回答