手动限制递归深度?

时间:2016-03-28 15:18:34

标签: c# recursion

我有一个简单的递归方法,在从Azure Service Bus Queue检索消息时调用自身。该方法将消息添加到消息列表中,然后,当队列中没有消息时,它将List发送回它的父方法以进行处理。

在正常情况下,当一切运行良好时,队列将永远不会有更多的消息,因为我们不断地从队列中提取消息,就像它们到达时一样快。但从理论上讲,如果我们的处理器发生故障,消息可能会匆忙堆积,消息的数量可能会变得很大。

我想在我们优雅地中止进程之前,将从队列中拉出并放入List的消息数量受到人为限制,发回一批要处理的消息,以及然后继续前进。但我不确定最好的方法。我可以创建一个整数并在每次调用时添加它,检查它的值,然后在它到达某一点时踢出该过程。但是,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

只需使用列表的大小作为限制器 - 您甚至不需要整数计数,因为您正在处理项目的数据结构已经跟踪了一个:

if (myMessageList.Length < maxAllowedValue) {
  // execute your getter procedure which includes
  // a call to self()...
}

对于此特定问题,您可能需要考虑使用here而不是List,因为这样可以在递归数据结构填充方法时安全地更改Length正在努力。