AppDomain.Unload выбрасывает в Finalizer?

Итак, вот история, у меня есть этот рабочий элемент, который использует AppDomain для выполнения некоторых задач. Домен требует больших затрат на установку и демонтаж. Итак, я создаю кеш для каждого потока объектов WeakReference для рабочего типа:

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
}

Проблема, с которой я столкнулся, заключается в том, что при вызове AppDomain.Unload всегда генерируется исключение:

System.CannotUnloadAppDomainException: Error while unloading appdomain. (Exception from HRESULT: 0x80131015)"

Итак Я думаю, что это странно, Я знаю, что у меня ничего не работает в этом домене ... В чем дело? Немного покопавшись, методом проб и ошибок я придумал следующее:

    ~Worker()
    { 
        new Action<AppDomain>(AppDomain.Unload)
            .BeginInvoke(_domain, null, null);
    }

Итак, мои вопросы:

  1. Всегда ли будет сбой AppDomain.Unload из финализатора? Почему?
  2. Могу ли я столкнуться с чем-то «нежелательным» при использовании вышеуказанного обходного пути?
7
задан tshepang 5 May 2014 в 17:50
поделиться