Ao executar este teste simples:
int ms = 2000;
try
{
Log("1");
Thread.Sleep(ms);
Log("2");
Thread.Sleep(ms);
Log("3");
Thread.Sleep(ms);
Log("4");
Thread.Sleep(ms);
Log("5");
}
finally
{
Log("6");
}
e parando o site um segundo depois que eu chamei a página, sempre recebo todas as seis entradas de log.
Portanto, em geral, sua (e minha) suposição original está correta, o processo em execução é concluído antes que o site seja encerrado.
É impossível que uma determinada solicitação não termine? E se for executado por horas? E se algo der errado e o processo de trabalho parar?
Eu procuraria outras razões pelas quais seu 'Log ("End");' não funciona.