Así que aquí está la historia hasta ahora, tengo esta cosa de trabajador que usa un Dominio de aplicación para realizar alguna tarea. El dominio es costoso de configurar y desmontar. Así se crea una memoria caché cosita por subproceso de objetos WeakReference al trabajador, así:AppDomain.Unload throws en Finalizer?
class Worker
{
[ThreadStatic]
static Dictionary<string, WeakReference> _workers;
public static Worker Fetch(...) { you get the idea }
private AppDomain _domain;
public Worker(...)
{
_domain = AppDomain.Create(...);
}
~Worker()
{
AppDomain.Unload(_domain);
}
// bla bla bla
}
El problema que estoy teniendo es que parece que tirar siempre una excepción en la llamada a AppDomain.Unload cuando recoge GC:
System.CannotUnloadAppDomainException: Error while unloading appdomain. (Exception from HRESULT: 0x80131015)"
así que estoy pensando que es extraño, sé que no tengo nada de 'funcionamiento' en ese dominio ... ¿Cuál es el trato? Un poco de excavación y de ensayo y error que se le ocurrió esto:
~Worker()
{
new Action<AppDomain>(AppDomain.Unload)
.BeginInvoke(_domain, null, null);
}
Así que mis preguntas son:
- Will AppDomain.Unload siempre fallan desde un finalizador? ¿Por qué?
- ¿Voy a experimentar algo "indeseable" con la solución anterior?
Posible duplicado de [¿Por qué AppDomain.Unload() error en el finalizador?] (Https://stackoverflow.com/questions/1891480/why-does-appdomain-unload-error-in-finalizer) – Fabian