Как предотвратить бесконечный цикл в ASP.net

In ASP.NET 4.0 веб-страницы, я хотел бы обнаружить и предотвратить код, который работает слишком долго. Поэтому я ищу такую конструкцию:

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

хотя в настоящее время мы используем 4.0, меня также интересуют решения для 4.5, возможно, добавленные асинхронные функции помогут.

1 ответов


вы создадите новый поток для длительной задачи, затем заблокируйте и дождитесь завершения этого потока или пока не будет достигнут тайм-аут. Если тайм-аут был достигнут, то задача предположительно заблокирована (либо бесконечный цикл, взаимоблокировка или блокирование ожидания ввода-вывода), и вы можете завершить поток.

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

здесь нет необходимости использовать 4.0 async. На самом деле этот код будет работать нормально на .NET 1.0 тоже.