如果我运行此代码,每个AppDomain
是否会在不同的线程中执行?
ThreadPool.QueueUserWorkItem(delegate
{
/// Create AppDomain and run code
});
答案 0 :(得分:12)
AppDomains默认情况下不会获得自己的线程。您可以使用现有线程在另一个AppDomain中执行代码,也可以在AppDomain中调用创建新线程的方法。实际上,除非你专门创建额外的线程,否则调用另一个域中的代码将在进程的主线程上执行。
可以运行多个应用程序域 在一个过程中;但是,有 不是一对一的相关性 应用程序域和线程。 几个线程可以属于一个 应用程序域,而一个给定的 线程不限于单个 应用领域,在任何给定时间, 一个线程在一个单独执行 应用领域。
在您的示例中,您创建线程(或更具体地说,线程池这样做),因此代码将在这些线程上运行。但是,我不确定我是否会建议在线程池线程上创建AppDomain。
卸载AppDomain将中止AppDomain中的所有线程。老实说,我不知道线程池将如何对此作出反应。有关卸载here的更多信息。
答案 1 :(得分:3)
App Domain比线程大,但比进程小。您可以将它们视为多个线程的潜在集合。如果App Domain创建另一个新App Domain,则新App Domain将拥有自己的线程。一个App Domain中的线程永远不会成为另一个App域的一部分,也不允许直接与其他App Domains的线程对话。