2012-07-12 26 views
0

我想將每次調用的響應時間均衡爲2秒。你認爲這是做它(vb.net代碼)的正確方法...均衡/標準化web api調用的響應時間


昏暗timeToSleep = 2000 - Date.Now.Subtract(開始).TotalMilliseconds

'的代碼EXECUTE這裏...

如果timeToSleep> 0,則Threading.Thread.Sleep(timeToSleep)


是否Threading.Thread.Sleep功能塊僅此API請求?如果其他人在執行睡眠功能時碰到api請求會怎麼樣?

有沒有更好的辦法,我應該這樣做?

謝謝。

回答

0

雖然我可以認爲這僅在測試場景(負載測試/用戶驗收測試)中模擬自然延遲很有用,而且此代碼永遠不會觸及生產,這將起作用,您的呼叫將延遲而其他呼叫可以運行。 問題是你是阻塞的線程:

如果返回正常的對象或HttpResponseMessage,您的通話將阻止ASP.NET的線程池這在IIS 7,我認爲是1000的任何更多的請求和服務器返回503錯誤。

如果您返回Task<T>,那麼您將阻止.NET的ThreadPool線程 - 除非您指定了使用另一個線程池的調度程序。該池中的線程數將在minmax之間波動,可使用ThreadPool的靜態方法進行設置。

我在我的blog上有一些關於此主題的帖子。

+0

謝謝你的迴應。 – Aaron 2012-07-13 12:23:33

0

Threading.Thread.Sleep函數是否僅阻止此api請求? 如果其他人在執行睡眠功能 時碰到api請求會怎麼樣?

請記住,當你可以嘗試通過睡眠來調整你的API調用的相對輸出時間,也不會是可靠的間隔時,等待時間,加工,快/慢響應的其他原因時間等因素都考慮在內。

有沒有更好的方法我應該這樣做?

如果有的話,我會說你的api調用很好,所以它儘可能的快速和輕量級,然後在調用它的時候在客戶端做你的間隔。 (除非我誤解你爲什麼這樣做。)

此外,你可能想看看一個長期的投票解決方案。