如何在方法仍在运行时重用它
本文关键字:运行时 方法 | 更新日期: 2023-09-27 18:16:44
我有以下代码:
CreateMultiLayerWakeupSteps()
{
var wakeupStep = new AutodetectWakeupStep
{
//Creating the object...
}
//Later in the process I have this operation:
wakeupStep.SuccessNextStep = UserInputs(wakeupStep);
}
UserInputs方法的实现是这样的:
private static AutodetectCommandStep UserInputs(AutodetectWakeupStep wakeupStep)
{
AutodetectCommandStep autodetectCommandStep
{
//Creating the object...
}
//Some more operations autodetectCommandStep here...
return autodetectCommandStep;
}
在UserInputs方法中,我想再次调用CreateMultiLayerWakeupStep方法,以便创建一个新的步骤,但抛出以下异常:StackOverflowException。
是否有一个解决方案来重用方法,而仍然运行?很难实施吗?我不熟悉线程异步。
这里没有关于多线程的内容。您正在尝试进行递归,但您没有指定递归何时结束。因为你收到了StackOverflowException
。
例如你应该在AutodetectCommandStep.ExecuteAgain
中有一个属性
void CreateMultiLayerWakeupSteps()
{
var wakeupStep = new AutodetectWakeupStep
{
//Creating the object...
}
//Later in the process I have this operation:
wakeupStep.SuccessNextStep = UserInputs(wakeupStep);
if(wakeupStep.SuccessNextStep.ExecuteAgain)
CreateMultiLayerWakeupSteps();
}
你应该决定什么时候这个ExecuteAgain
将是假的取决于你的上下文中,所以你将离开这个方法。如果它总是为真,它将抛出相同的异常。
也可能是一个好主意是在CreateMultiLayerWakeupSteps(AutodetectWakeupStep wakeUpStep)
之外创建AutodetectWakeupStep对象。你的代码看起来像这样。
void CreateMultiLayerWakeupSteps(AutodetectWakeupStep wakeUpStep)
{
AutodetectWakeupStep step = UserInputs(wakeupStep);
if(step.ExecuteAgain)
CreateMultiLayerWakeupSteps(step);
}