我遇到了一个奇怪的情况,即在范围结束后代表的执行仍在继续。我最后也使用了GC.collect(),但即使它没有用完。
我正在使用与硒有关的东西,这种东西一直持续到最后,但你可以打印数量。
在这里,我想知道为什么即使它超出范围,它仍然继续执行代码的原因。 这里我的意思是automationActions,delAutomationAction超出了范围
class OptimixAutomation
{
public delegate void DelAutomationAction(ExeActions actionId);
static void Main(string[] args)
{
int numberOfInstances = Convert.ToInt32(ConfigurationManager.AppSettings["NumberOfInstances"]);
ExeActions actionId = (ExeActions)Convert.ToInt32(ConfigurationManager.AppSettings["ActionId"]);
for (int i = 0; i < numberOfInstances; i++)
{
AutomationActions automationActions = new AutomationActions();
DelAutomationAction delAutomationAction = new DelAutomationAction(automationActions.Login);
try
{
delAutomationAction.BeginInvoke(actionId: actionId, callback: null, @object: null);
}
catch (Exception e)
{
}
Thread.Sleep(10000);
}
Console.ReadKey();
}
}
答案 0 :(得分:-1)
AutomationActions automationActions = new AutomationActions();
DelAutomationAction delAutomationAction = new DelAutomationAction(automationActions.Login);
- 这一行。如您所见,DelAutomationAction引用了automationActions。因为DelAutomationAction是异步执行的,所以它仍处于“范围”中。并且因为GC可以从“delAutomationAction”进入“automationActions”,所以第一个对象将不会被删除(并被处置)。