¿Cómo puedo hacer un bucle de forma segura hasta que no haya nada más que hacer sin usar un "marcador de posición" mientras estoy en condiciones?

Para llamar a mi método de API web hasta que no se devuelvan más datos (lo estoy recuperando por lotes, para mantener cada conjunto de resultados pequeño, debido a la persona débil del cliente (dispositivo de mano Windows CE)), Estoy usando este código:

while (moreRecordsExist)
{
    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<JArray>(s);
            if (null == arr) break;

            foreach (JObject obj in arr)
            {
                id = obj.Value<int?>("Id") ?? 0;
                var _redemptionId = obj.Value<string>("RedemptionId") ?? "";
                var _redemptionItemId = obj.Value<string>("RedemptionItemId") ?? "";
                var _redemptionName = obj.Value<string>("RedemptionName") ?? "";
                double _redemptionAmount = obj.Value<double?>("RedemptionAmount") ?? 0.0;
                var _redemptionDept = obj.Value<string>("RedemptionDept") ?? "";
                var _redemptionSubdept = obj.Value<string>("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

Esto funciona (si compruebo webResponse para nulo, se bloquea con una NullReferenceException), pero realmente no me gusta mi bucle while, ya que nunca se alcanza una vez que se asigna false a RecordExExist. Así que dejé sueltos a los sabuesos Resharper para ver si tenía una sugerencia mejor, pero simplemente me dice: "La expresión siempre es cierta" para esa línea, y la "solución" sugerida para esto es cambiarla a "mientras que (cierto)"

Sin embargo, no veo cómo eso es una gran mejora.

¿Hay alguna manera en que pueda lograr lo mismo con una construcción más sensible?

Respuestas a la pregunta(3)

Su respuesta a la pregunta