2012-09-05 16 views
6

Nelle pagine Web ASP.NET 4.0, vorrei rilevare e prevenire codice troppo lungo. Quindi sto cercando un costrutto come questo:Come prevenire un ciclo infinito in ASP.net

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

Anche se stiamo attualmente utilizzando 4.0, vorrei anche essere interessati a soluzioni per la 4.5, forse le caratteristiche aggiunte asincroni aiuterebbe.

risposta

6

Si genera un nuovo thread per l'attività di lunga durata, quindi si blocca e si attende il completamento di tale thread o fino al raggiungimento di un timeout. Se è stato raggiunto il timeout, l'attività presumibilmente è bloccata (un loop infinito, un deadlock o un IO di attesa bloccante) ed è possibile interrompere il thread.

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

Non c'è bisogno di usare la roba 4.0 async qui. In realtà questo codice funzionerà bene anche su .NET 1.0.

+0

penso tu voglia dire 4.5 asincrono. Grazie per il concetto del battistrada. – Knox

Problemi correlati