[英]AppDomains, Unloading, and ThreadAbortException
我第一次嘗試與AppDomains合作,但發現自己有些失落。
這是我做的事情:我有一個控制台應用程序,該應用程序實例化Bootstrapper類並調用Bootstrapper.Bootstrap。
該類如下所示:
public class Bootstrapper : MarshalByRefObject
{
private static AppDomain SecondaryAppDomain;
private Bootstrapper _secondaryDomainBootstrapper;
public Robot CurrentlyRunningRobot;
public Bootstrapper OwningBootstrapper;
public Bootstrapper()
{
}
public void Bootstrap()
{
InitializeSecondaryAppDomain();
RunInSecondaryAppDomain();
}
private void DestroySecondaryAppDomain()
{
AppDomain.Unload(SecondaryAppDomain);
}
private static int initCount = 0;
private static void InitializeSecondaryAppDomain()
{
initCount++;
SecondaryAppDomain = AppDomain.CreateDomain("SecondaryAppDomain" + initCount);
}
private void RunInSecondaryAppDomain()
{
_secondaryDomainBootstrapper =
(Bootstrapper)
SecondaryAppDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName,
"myNamespace.Bootstrapper");
_secondaryDomainBootstrapper.OwningBootstrapper = this;
_secondaryDomainBootstrapper.Initialize(Args);
}
private void Initialize(string[] args)
{
//Do some stuff...
//Start() returns Task<Robot>
var robot = Initializer.Start();
CurrentlyRunningRobot = robot.Result;
CurrentlyRunningRobot.HardResetRequested += OnHardResetRequested;
robot.Wait();
}
private void DoHardReset()
{
DestroySecondaryAppDomain();
InitializeSecondaryAppDomain();
RunInSecondaryAppDomain();
}
private void OnHardResetRequested(object sender, EventArgs e)
{
OwningBootstrapper.DoHardReset();
}
}
目的是在輔助域中運行任何內容,並請求終止並重新啟動它。
但是,發生的是,當我調用DestroySecondaryAppDomain()(從默認的AppDomain內部)時,出現了ThreadAbortExceptions。
我讀過很多文檔,這似乎很正常。 我遇到的困難是為什么我似乎無法在默認的AppDomain中處理它。
當輔助AppDomain卸載后(在DestroySecondaryAppDomain中),我再也無法執行DoHardReset中的其余代碼。 我無法理解什么(可能很簡單)?
簡而言之,該AppDomain中仍在執行代碼。 必須先將其完全停止,然后才能成功將其正確卸載。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.