如何在我的C#代码中防止StackoverflowException

时间:2018-03-24 05:36:26

标签: c#

我正在调用我从服务器获取数据的API。当响应具有nextpageToken时,该函数使用pagetoken调用自身。

代码工作正常,但它是make stackoverflow Exception。如果这个东西需要调用350次(每次使用new pagetoken进行方法调用),那就会造成stackoverflow异常。

例如这是代码。

user.password

有人请检查如何解决这个问题。以前我在Task中运行了一些子项,但它失败了,因为API命中太快,所以我删除了该任务。

现在它是单线程代码,它仍然无法正常工作。

2 个答案:

答案 0 :(得分:4)

使用循环 - 将您的方法分为两部分。 制作第二个不处理NextPage令牌的方法,这个新方法只返回结果。

在“GetData”方法中你可以做这样的事情

public static void GetData(Channel info, string pagetoken =null)
{
   // get the data from api
   var result = GetResultFromServer(info,pagetoken);        
   while(result != null)
   {
      //handle content of one page
      //
      // do something with one page.. add it to a result list or whatever 
      // you have to do
      // 
      if(result.nextPageToken != null)
      {
         var result = GetResultFromServer(info,result.nextPageToken )
       }
       else{result = null}
   }
   // enter into database
  return;
}

答案 1 :(得分:3)

这样的东西
string pageToken=null;
do { 
    pageToken = Getdata(info, pageToken):
} while (pageToken != null)