Finalmente no se ejecuta cuando se está ejecutando un subproceso en un servicio de Windows
¿Alguien puede explicar por qué este bloque finalmente no se ejecuta? He leído publicaciones sobre cuándo esperar que finalmente no se ejecute el bloqueo, pero este parece ser otro caso. Este código necesita TopShelf y log4net. Estoy ejecutando .net 4.5
Supongo que debe ser el motor del Servicio de Windows el que activa las excepciones no controladas, pero ¿por qué se está ejecutando antes de que finalice el bloqueo?
using log4net;
using log4net.Config;
using System;
using System.Threading;
using Topshelf;
namespace ConsoleApplication1
{
public class HostMain
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<HostMain>(s =>
{
s.ConstructUsing(name => new HostMain());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetServiceName("TimerTest");
});
}
public void Stop()
{
LogManager.GetLogger("MyLog").Info("stopping");
}
public void Start()
{
XmlConfigurator.Configure();
LogManager.GetLogger("MyLog").Info("starting");
new Thread(StartServiceCode).Start();
}
public void StartServiceCode()
{
try
{
LogManager.GetLogger("MyLog").Info("throwing");
throw new ApplicationException();
}
finally
{
LogManager.GetLogger("MyLog").Info("finally");
}
}
}
}
salidas
starting
throwing
stopping
EDITAR: Por favor comente por qué está bajando de categoría, ¿tal vez no entiende el problema? Veo un gran problema aquí. Escribes algo de lógica de dominio que hace cosas importantes en la cláusula final de Exception. Luego, si aloja la lógica en un servicio de Windows, el diseño de repente se rompe.