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

Cod*_*der 8 c# multithreading appdomain

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

 ThreadPool.QueueUserWorkItem(delegate
 {
     /// Create AppDomain and run code
 });
Run Code Online (Sandbox Code Playgroud)

Bri*_*sen 13

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

AppDomain文档

多个应用程序域可以在单个进程中运行; 但是,应用程序域和线程之间没有一对一的关联.多个线程可以属于单个应用程序域,并且虽然给定线程不限于单个应用程序域,但在任何给定时间,线程都在单个应用程序域中执行.

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

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