2012-09-05 101 views
6

在ASP.NET 4.0網頁中,我想檢測並防止運行時間過長的代碼。所以我在尋找這樣一個結構:如何防止ASP.net中的無限循環

try for 1000 ms 
{ 
    RunPotentiallyTooLongCode(); 
} 
catch 
{ 
    RecordError("code ran out of control"); 
    // let user know 
    ... 
} 

雖然我們目前使用的4.0,我也有興趣在解決方案4.5,或許增加了異步功能會有所幫助。

回答

6

您會爲長時間運行的任務生成一個新線程,然後阻塞並等待該線程完成或直至超時。如果達到超時,則任務可能已被阻塞(無限循環,死鎖或阻塞IO等待),並且可以終止該線程。

Thread thread = new Thread(RunPotentiallyTooLongCode); 
thread.Start(); 
Boolean success = thread.Join(1000); 
if(!success) thread.Abort(); 

這裏沒有必要使用4.0異步的東西。事實上,這些代碼也可以在.NET 1.0上正常運行。

+0

我認爲你的意思是4.5異步。感謝您的胎面概念。 – Knox