How can I safely loop until there is nothing more to do without using a “placeholder” while conditon?

后端 未结 3 745
名媛妹妹
名媛妹妹 2021-01-23 16:47

In order to call my Web API method until no more data is returned (I\'m fetching it in batches, to keep each result set small, due to the 98-lb-weakling persona of the client (W

3条回答
  •  独厮守ぢ
    2021-01-23 17:12

    Consider using a do..while() loop. This gets you around the "while-loop-is-never-reached" problem... it will always run at least once, no matter what moreRecordsExist is set to.

    do
    {
        redemptionsList.redemptions.Clear();
        string uri = String.Format("http://platypus:28642/api/Redemptions/{0}/{1}",     lastIdFetched, RECORDS_TO_FETCH);
        var webRequest = (HttpWebRequest)WebRequest.Create(uri);
        webRequest.Method = "GET";
    
        using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
        {
            if (webResponse.StatusCode == HttpStatusCode.OK)
            {
                var reader = new StreamReader(webResponse.GetResponseStream());
                string s = reader.ReadToEnd();
                var arr = JsonConvert.DeserializeObject(s);
                if (arr == null) break;
    
                foreach (JObject obj in arr)
                {
                    id = obj.Value("Id") ?? 0;
                    var _redemptionId = obj.Value("RedemptionId") ?? "";
                    var _redemptionItemId = obj.Value("RedemptionItemId") ?? "";
                    var _redemptionName = obj.Value("RedemptionName") ?? "";
                    double _redemptionAmount = obj.Value("RedemptionAmount") ?? 0.0;    
                    var _redemptionDept = obj.Value("RedemptionDept") ?? "";
                    var _redemptionSubdept = obj.Value("RedemptionSubDept") ?? "";
    
                    redemptionsList.redemptions.Add(new HHSUtils.Redemption
                    {
                        Id = id,
                        RedemptionId = _redemptionId,
                        RedemptionItemId = _redemptionItemId,
                        RedemptionName = _redemptionName,
                        RedemptionAmount = _redemptionAmount,
                        RedemptionDept = _redemptionDept,
                        RedemptionSubDept = _redemptionSubdept,
                    });
                } // foreach
            } // if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 2))
        } // using HttpWebResponse
        int recordsAdded = LocalDBUtils.BulkInsertRedemptions(redemptionsList.redemptions);
        totalRecordsAdded += recordsAdded;
        moreRecordsExist = (recordsToFetch > (totalRecordsAdded));
        lastIdFetched = id;
    } while (moreRecordsExist);
    

提交回复
热议问题