2012-09-05 32 views
6

En las páginas web de ASP.NET 4.0, me gustaría detectar y evitar el código que se ejecuta demasiado tiempo. Así que estoy buscando una construcción como esta:Cómo evitar un bucle infinito en ASP.net

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

pesar de que estamos utilizando actualmente 4.0, también estaría interesado en soluciones de 4,5, tal vez las características añadidas asincrónicos ayudarían.

Respuesta

6

Generaría un nuevo hilo para la tarea de larga duración, luego bloquearía y esperaría a que se completara ese hilo o hasta que se alcanzara un tiempo de espera. Si se alcanzó el tiempo de espera, entonces la tarea se ha bloqueado presumiblemente (ya sea un bucle infinito, un punto muerto o una espera IO de bloqueo) y puede finalizar el hilo.

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

No es necesario utilizar las 4.0 cosas asincrónicas aquí. De hecho, este código correrá bien en .NET 1.0 también.

+0

creo que te refieres a 4.5 async. Gracias por el concepto de la banda de rodadura. – Knox

Cuestiones relacionadas