Em um aplicativo ASP.Net, o usuário clica em um botão na página da Web e isso instancia um objeto no servidor por meio do manipulador de eventos e chama um método no objeto. O método vai para um sistema externo para fazer coisas e isso pode demorar um pouco. Então, o que eu gostaria de fazer é executar essa chamada de método em outro thread para que eu possa retornar o controle ao usuário com "Sua solicitação foi enviada". Estou razoavelmente feliz em fazer isso como disparar e esquecer, embora seria ainda melhor se o usuário pudesse continuar pesquisando o status do objeto.
O que não sei é se o IIS permite que meu thread continue em execução, mesmo que a sessão do usuário expire. Imagine, o usuário dispara o evento e nós instanciamos o objeto no servidor e disparamos o método em uma nova thread. O usuário fica satisfeito com a mensagem "Sua solicitação foi enviada" e fecha o navegador. Eventualmente, esta sessão de usuário atingirá o tempo limite no IIS, mas o thread ainda pode estar em execução, funcionando. O IIS permitirá que o thread continue em execução ou irá eliminá-lo e descartar o objeto quando a sessão do usuário expirar?
EDIT: Pelas respostas e comentários, entendo que a melhor maneira de fazer isso é mover o processamento de longa duração para fora do IIS. Além de tudo, isso lida com o problema de reciclagem de appdomain. Na prática, preciso tirar a versão 1 do papel em tempo limitado e trabalhar dentro de uma estrutura existente, portanto, gostaria de evitar a camada de serviço, daí o desejo de apenas disparar o thread dentro do IIS. Na prática, "longa duração" aqui levará apenas alguns minutos e a concorrência no site será baixa, portanto, deve estar tudo bem. Mas, a próxima versão definitivamente precisará ser dividida em uma camada de serviço separada.