如果我運行這段代碼,是否每個AppDomain
都在不同的線程中執行?AppDomain是否在自己的線程中執行?
ThreadPool.QueueUserWorkItem(delegate
{
/// Create AppDomain and run code
});
如果我運行這段代碼,是否每個AppDomain
都在不同的線程中執行?AppDomain是否在自己的線程中執行?
ThreadPool.QueueUserWorkItem(delegate
{
/// Create AppDomain and run code
});
AppDomain在默認情況下不會獲得自己的線程。您可以使用現有的線程在另一個AppDomain中執行代碼,或者調用AppDomain中的一個方法來創建新的線程。事實上,除非你專門創建了額外的線程,否則調用另一個域中的代碼將在進程的主線程中執行。
多個應用程序域可以在單個進程中運行 ;但是, 不是 應用程序域和線程之間的一對一關聯。 幾個線程可以屬於單個應用程序域,並且給定的 線程不限於單個應用程序域,在任何給定時間,線程都在單個應用程序域中執行。
在你的例子中,你創建了線程(或者更具體地說線程池是這樣做的),因此代碼將在這些線程上運行。但是,我不確定我會建議如何在線程池線程上創建AppDomain。
卸載AppDomain將中止AppDomain中的所有線程。我真的不知道線程池將如何對此作出反應。有關卸載的更多信息here。
應用程序域比線程大,但比進程小。你可以把它們想象成多個線程的潛在集合。如果應用程序域創建另一個新的應用程序域,則新的應用程序域將擁有自己的線程。一個應用程序域中的線程永遠也不會成爲另一個應用程序域的一部分,也不允許直接與其他應用程序域的線程對話。
爲什麼downvote? – 2010-03-05 16:56:29
_「如果應用程序域創建另一個新的應用程序域,則新的應用程序域將擁有它自己的線程。」_。雖然我不是downvoter,但是這個陳述除了實際發生的事情之外還有一點點。當你創建另一個AppDomain時,它將在當前線程中執行。如果你想在自己的線程中運行AppDomain,你將不得不專門創建一個新線程,並在該線程中創建並啓動新的AppDomain。 – Abel 2013-12-09 15:13:42