我的一位同事寫了一些代碼,在進行web服務調用以檢查值的狀態之前,本質上暫停了1秒。此代碼寫入MVC 4應用程序的控制器操作中。操作本身不是異步的。在MVC控制器動作中暫停
var end = DateTime.Now.AddSeconds(25);
var tLocation = genHelper.GetLocation(tid);
while (!tLocation.IsFinished && DateTime.Compare(end, DateTime.Now) > 0)
{
var t = DateTime.Now.AddSeconds(1);
while (DateTime.Compare(t, DateTime.Now) > 0) continue;
// Make the webservice call so we can update the object which we are checking the status on
tLocation = genHelper.GetLocation(tid);
}
它似乎工作,但由於某種原因,我對它的實施有一些擔憂。有沒有更好的方法來做這個延遲?
注:
- 我們沒有使用.NET 4.5和在此解決方案
- 的Javascript紙條選項,如SignalR不會改變這個目前不
我有一個選項他認爲這個問題是一個很好的選擇,但他沒有接受,並表示這不是他所做的工作所必需的。
How to put a task to sleep (or delay) in C# 4.0?
我會切換到ajax查詢網站,而不是阻塞在服務器上的線程25秒... – Timmerz
是的,我會建議,感謝但時間可能是決定這一個。乾杯 – dreza
可能已經使用.Net 4.5,但我仍然會提到這個和Thread.Sleep的風險是什麼。在線程不做任何事情但不能被分配來處理另一個請求的過程中,兩者都阻塞線程一段時間。這會導致在某些時候阻止HTTP請求,因爲沒有線程可用。當這一點取決於許多因素時,併發用戶的數量只是其中的一個,例如,每個用戶操作有許多ajax請求的站點將耗盡併發用戶較少的線程。所以不要阻塞線程,特別是在Web服務器上。 – user3285954