Домены приложений выполняются в своих собственных потоках? - PullRequest
7 голосов
/ 05 марта 2010

Если я выполню этот код, каждый AppDomain будет выполняться в отдельном потоке?

 ThreadPool.QueueUserWorkItem(delegate
 {
     /// Create AppDomain and run code
 });

Ответы [ 2 ]

12 голосов
/ 05 марта 2010

Домены приложений не получают свой собственный поток по умолчанию. Вы можете выполнить код в другом Домене приложений, используя существующие потоки, или вызвать метод в Домене приложений, который создает новые потоки. Фактически, если вы специально не создадите дополнительные потоки, вызов кода в другом домене будет выполняться в главном потоке процесса.

Из документации AppDomain

Может работать несколько доменов приложений в одном процессе; однако есть не один к одному корреляции между домены приложений и темы. Несколько потоков могут принадлежать одному домен приложения, а пока данный нить не ограничивается одним домен приложения, в любой момент времени, поток выполняется в одном домен приложения.

В вашем примере вы создаете потоки (или, точнее, пул потоков), и, таким образом, код будет выполняться в этих потоках. Однако я не уверен, что рекомендую создавать домены приложений в потоках пула потоков, подобных этому.

Выгрузка домена приложения приведет к прерыванию любых потоков в домене приложения. Честно говоря, я не знаю, как пул потоков отреагирует на это. Подробнее о разгрузке здесь .

3 голосов
/ 05 марта 2010

Домен приложения - это нечто большее, чем поток, но меньше, чем процесс. Вы могли бы думать о них как о потенциально коллекциях из нескольких потоков. Если домен приложения создает другой, новый домен приложения, у нового домена приложения будет свой собственный поток. Поток в одном Домене приложений также никогда не будет частью другого домена Приложения, и при этом ему не будет разрешено напрямую общаться с потоками из других Доменов Приложения.

...