如何在方法仍在运行时重用它

本文关键字:运行时 方法 | 更新日期: 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);
}