[英]C# Should I Loop until no exception?
我想通過一個循環 go 一次,但前提是通過循環拋出異常 go 。 我將如何在 C# 中寫這個?
謝謝
這對我來說是糟糕的設計。 一般規則是:異常不應用於流量控制。 有許多的原因; 也就是說,通常有更好/更可靠的方法可用於在拋出異常之前檢查事物,並且它會降低效率。
盡管如此,為了爭論,您可以執行以下操作:
while (true)
{
try
{
// do stuff here
}
catch (MyException)
{
continue;
}
// all is good
break;
}
再次 - 這不是推薦的方式。 如果您能提供更多上下文/示例/,我很樂意提出更好的建議
您可以在以下位置設置重試次數:
int tryCount = 0;
while (tryCount < 3)
{
try
{
someReturn = SomeFunction(someParams);
}
catch (Exception)
{
tryCount++;
continue;
}
break;
}
這真的取決於你在做什么,以及拋出的異常類型。 許多異常並不是通過使用完全相同的輸入/數據再次嘗試來修復的,因此循環只會無限地不斷生成異常。
相反,您應該檢查相關異常,然后針對這些特定異常以適當的方式處理它們。
為什么不調用一個實際執行循環的函數,並在它之后有一個會再次調用該函數的捕獲。
private void loop() {
for(...) {
}
}
其他一些方法:
try {
loop();
} catch(Exception e) {
loop();
}
似乎是一個壞主意,但無論如何嘗試這樣的事情:
刪除
就像是:
bool done = false;
while( ! done )
{
try
{
DoSomething();
done = true;
} catch(Exception ex)
{
HandleException(ex);
}
}
正如諾多林所說,它聞起來像一個糟糕的設計。 您正在使用異常來控制程序的流程。 最好對會導致您重復操作的條件進行顯式檢查。
所以我正在使用這個簡單的東西:D
bool exceptionthrow = false;
while (!exceptionthrow)
{
try
{
value = Convert.ToInt32(Console.ReadLine()); //example
exceptionthrow = true;
}
catch (Exception)
{
exceptionthrow = false;
continue;
}
}
希望能幫助到你 :)
你可以使用波莉
然后您只需要使用您的異常和重試計數配置策略:
var retryPolicy = Policy
.Handle<IOException>(x => x.Message.Contains("already exist"))
.Or<FormatException>()
.Retry(3);
你像這樣使用:
retryPolicy.Execute(() =>
{
throw new FormatException();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.