Donc, voici l'histoire jusqu'à présent, j'ai ce truc de travailleur qui utilise un AppDomain pour effectuer une tâche. Le domaine est coûteux à configurer et à démonter. Je crée donc un cache par thread d'objets WeakReference au travailleur thingy comme ceci:AppDomain.Unload renvoie dans 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
}
Le problème que je vais avoir est que semble toujours jeter une exception dans l'appel à AppDomain.Unload lorsque GC recueille:
System.CannotUnloadAppDomainException: Error while unloading appdomain. (Exception from HRESULT: 0x80131015)"
Je pense que ce bizarre, je sais que je n'ai rien « en cours d'exécution » dans ce domaine ... ce qui est l'affaire? Un peu de creuser et de tâtonnements je suis venu avec ceci:
~Worker()
{
new Action<AppDomain>(AppDomain.Unload)
.BeginInvoke(_domain, null, null);
}
Mes questions sont les suivantes:
- Will AppDomain.Unload échouent toujours d'un Finalizer? Pourquoi? Est-ce que je vais expérimenter quelque chose d'indésirable avec la solution de contournement ci-dessus?
Copie possible de [Pourquoi l'erreur AppDomain.Unload() dans le finaliseur?] (Https://stackoverflow.com/questions/1891480/why-does-appdomain-unload-error-in-finalizer) – Fabian