Un semplice esempio che mostra come è possibile chiamare un metodo e fare in modo che il tempo di esecuzione ad esso dedicato sia limitato da un time-out entro il quale deve aver terminato la propria esecuzione.
private void callMethodTimeout(int timeout)
{
Thread t = new Thread(delegate()
{
try
{
// thread execution
Thread.Sleep(2000);
}
catch(ThreadAbortException)
{
//thread aborted
}
});
t.Start();
if (!t.Join(timeout))
t.Abort();
}
|
Le poche righe di codice mostrate sopra indicano come è possibile limitare il tempo di esecuzione di un metodo attraverso un thread che esegue le elaborazioni richieste (simulate per esempio da uno sleep), limitato termporalmente mediante un join che blocca il codice per il tempo indicato nel timeout e ritorna un valore (true) solo se l'esecuzione del thread termina prima della scadenza imposta dal timeout.
Nel caso che entro il tempo stabilito il thread non sia terminato, il thread viene abortito e il metodo ritorna al codice chiamante.