2013-04-12 62 views
0

我對我的代碼有點強迫症,並想知道其他人如何構建下面的示例控制流。我沒有發現任何通過我的「漂亮」代碼測試的東西。什麼是你喜歡的方式來清理這樣的while循環?

var records = repo.GetRecords(batch:10); 

while(records.Any()) 
{ 
    var processed = ProcessRecords(records);   
    repo.DeleteRecords(processed);  
    records = repo.GetRecords(batch:10); 
} 

感謝

+0

是不是它(刪除元素onne)比計數器慢? –

+2

你有什麼不對? –

+0

@ChuckConway沒有什麼比美學我猜。想想也許有人有一個聰明的拉姆達方法。 – NATO24

回答

1

以@約翰Kugleman的上述類似,但使用而不是爲。

while (true) 
{ 
    var records = repo.GetRecords(batch:10); 

    if (!records.Any()) break; 

    var processed = ProcessRecords(records);   
    repo.DeleteRecords(processed);  
} 

您還可以找到這樣的問題:

Split List into Sublists with LINQ

那請問該如何 「chunkify」 項目的順序。這種技術可能適用於或可能不適用於您的情況。

假設塊擴展方法(類似於@ TickleMeElmo的距離@ JaredPar的答案回答或拆分),你的代碼可能是這樣的:

foreach (var chunk in repo.GetRecords().Chunk(10)) 
{ 
    var processed = ProcessRecords(chunk); 
    repo.DeleteRecords(processed); 
} 

如果你已經有了某種笑裏藏刀可能無法正常工作那麼好內置到您的存儲庫中的「塊化」。

1
while (true) 
{ 
    var records = repo.GetRecords(batch:10); 

    if (!records.Any()) 
     break; 

    var processed = ProcessRecords(records);   
    repo.DeleteRecords(processed);  
} 
+0

我通常按照你提到的方式去做,但我甚至會在打破之前加上延遲。這會是一個壞主意嗎? –

+0

@VaibhavDesai你是什麼意思,你打破之前添加一個延遲? –

+0

只需要10秒的睡眠時間,以避免一次又一次檢查是否沒有任何處理。我想這應該是一個特定於應用程序的事情。 –

相關問題