Uma pergunta muito pertinente que me fizeram durante a palestra, mais precisamente quando estava falando sobre as páginas assíncronas, é se é ou não possível definir um timeout para a execução da mesma.
Desta forma apenas, não. Para isso, você deve utilizar as chamadas Tarefas Assíncronas. Basicamente ela tem o mesmo conceito das páginas assíncronas, mas permite a definição/suporte de timeout (em segundos), propagação do contexto de segurança para as chamadas assíncronas e, finalmente, a possibilidade de execução paralela das tarefas (pois podemos adicionar N tarefas em cada página).
Abaixo segue a implementação básica desta funcionalidade:
<%@ Page Async=”true” AsyncTimeout=”15″ … %>
protected void Page_Load(object sender, EventArgs e)
{
this.RegisterAsyncTask(
new PageAsyncTask(
new BeginEventHandler(Inicio),
new EndEventHandler(Fim),
new EndEventHandler(ExcedeuTimeout),
null,
true)); //Processamento paralelo (default é false)
this.ExecuteRegisteredAsyncTasks();
}
private IAsyncResult Inicio(object sender, EventArgs e, AsyncCallback callback, object state) { }
private void Fim(IAsyncResult result) { }
private void ExcedeuTimeout(IAsyncResult result) { }