Как я уже упоминал в комментарии, направленном на @ Al-Muhandis, представляется возможным создать оболочку вокруг пользовательской задачи так, чтобы оболочка блокировалась, но не была DLL-библиотекой пользовательской задачи. Я сделал первый шаг к этому с проектом изолированные задачи . Возможно, он глючит, и пока работает только с VS2008. Запросы на извлечение приветствуются.
Идея проекта была основана на наблюдении, что задачи, производные от MarshalByRefObject
(используя, возможно, AppDomainIsolatedTask
), по-видимому, загружаются в основной домен приложения для целей отражения, но создается новый домен приложения выполнить задание Поскольку загрузка в основной домен приложения по-прежнему блокирует библиотеку DLL, было полезно создать библиотеку DLL с задачей, производной от AppDomainIsolatedTask
, которая загружает библиотеки пользовательских задач. Таким образом, DLL-оболочка блокируется, но, поскольку она выполняется в своем собственном домене приложения, DLL-файлы пользовательских задач выгружаются при выгрузке исполняющего домена задачи-оболочки. Эта процедура позволяет избежать блокировки библиотек пользовательских задач после завершения сборки.