此代码是否被视为递归
本文关键字:递归 代码 是否 | 更新日期: 2023-09-27 17:58:10
我有一个与下一个逻辑一起工作的无尽进程(注意ServiceUtilities_OnReSubscribing
到timer_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
不在同一调用堆栈上。
因此,您不必担心堆栈溢出,因为调用堆栈不会增长。