此代码是否被视为递归

本文关键字:递归 代码 是否 | 更新日期: 2023-09-27 17:58:10

我有一个与下一个逻辑一起工作的无尽进程(注意ServiceUtilities_OnReSubscribingtimer_Elapsed之间的圆圈)-当ServiceUtilities_OnSubscripting中引发异常时,它将创建一个新的计时器t,在't'的finish"事件中,将调度对ServiceUtilities_OnSubscripting的调用。

我想知道C#堆栈在这种情况下是如何表现的,它被认为是递归吗?

    System.Timers.Timer timer;
    readonly object timerLocker = new object();
    void ServiceUtilities_OnReSubscribing()
    {
        lock (timerLocker)
        {
            try
            {
                 //do something
            }
            catch (Exception ex)
            {
                //do somehing...
                timer = SetTimer();
                timer.Start();
            }
        }
    }
    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        CleanTimer(timer);
        ServiceUtilities_OnReSubscribing();
    }

    private System.Timers.Timer SetTimer()
    {
        int miliSeconds = 0;
        if (int.TryParse(ConfigurationManager.AppSettings["ReSubscribingTimer"], out miliSeconds) == false)
            miliSeconds = 3000;
        if (miliSeconds <= 1000)
            miliSeconds = 3000;
        System.Timers.Timer timer = new System.Timers.Timer(miliSeconds);
        timer.Enabled = true;
        timer.Elapsed += timer_Elapsed;
        return timer;
    }
    private void CleanTimer(System.Timers.Timer timer)
    {
        timer.Elapsed -= timer_Elapsed;
        timer.Dispose();
    }

我想避免出现由于多次递归调用而导致堆栈争用已满的情况。这段代码被认为是递归吗?

此代码是否被视为递归

您的timer_Elapsed方法是从定时器线程调用的,因此它与ServiceUtilities_OnReSubscribing不在同一调用堆栈上。

因此,您不必担心堆栈溢出,因为调用堆栈不会增长。