AppDomains是否在自己的线程中执行?

时间:2010-03-05 16:42:05

标签: c# multithreading appdomain

如果我运行此代码,每个AppDomain是否会在不同的线程中执行?

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

2 个答案:

答案 0 :(得分:12)

AppDomains默认情况下不会获得自己的线程。您可以使用现有线程在另一个AppDomain中执行代码,也可以在AppDomain中调用创建新线程的方法。实际上,除非你专门创建额外的线程,否则调用另一个域中的代码将在进程的主线程上执行。

来自AppDomain documentation

  

可以运行多个应用程序域   在一个过程中;但是,有   不是一对一的相关性   应用程序域和线程。   几个线程可以属于一个   应用程序域,而一个给定的   线程不限于单个   应用领域,在任何给定时间,   一个线程在一个单独执行   应用领域。

在您的示例中,您创建线程(或更具体地说,线程池这样做),因此代码将在这些线程上运行。但是,我不确定我是否会建议在线程池线程上创建AppDomain。

卸载AppDomain将中止AppDomain中的所有线程。老实说,我不知道线程池将如何对此作出反应。有关卸载here的更多信息。

答案 1 :(得分:3)

App Domain比线程大,但比进程小。您可以将它们视为多个线程的潜在集合。如果App Domain创建另一个新App Domain,则新App Domain将拥有自己的线程。一个App Domain中的线程永远不会成为另一个App域的一部分,也不允许直接与其他App Domains的线程对话。