簡體   English   中英

異常后如何繼續執行?

[英]How to continue execution after exceptions?

我正在使用一個API,用於訪問股票市場(如交易所)的只讀數據,以獲取報價/價格。 它工作得很好,但是有時當我讓應用程序運行時,會拋出類似“ TaskCanceledException”的異常。

如何安全地忽略這些並繼續執行相同的功能?

因為如果函數調用失敗,則不會發生任何不好的事情,因為我只是在顯示價格,因此它可以跳過一些函數調用而不會給用戶帶來任何問題。

我需要做這樣的事情嗎?

try
{
    this.UpdateFields ( );
}
catch ( Exception ex )
{
    Console.WriteLine ( ex );
    Console.WriteLine ( "Continue" );
    this.UpdateFields ( );
}

等等,對於每個異常情況?

我相信更明智的方法是在UpdateFields函數中捕獲異常。

我假設函數在每個字段中進行迭代,並隨其更新,並且在該循環中將捕獲該字段。

    private void UpdateFields()
    {

        foreach (var field in fields)
        {
            try
            {
                // Update a field
            }
            catch (TaskCanceledException ex)
            {
                Console.WriteLine(ex);
                // Control flow automatically continues to next iteration
            }

        }
    }

我在評論中問你:

你想做什么? 您想在出錯的情況下重試嗎?

你回答:

@CodingYoshi基本上是,因為在BG worker中使用計時器調用了此函數。

如果您使用計時器來調用它,那么只需下面的代碼就足夠了,因為計時器會再次調用它:

try
{
    this.UpdateFields();
}
catch (Exception e)
{
    // Either log the error or do something with the error
}

如果您沒有使用計時器,但想繼續嘗試,則可以在如下循環中進行:

bool keepTrying = true;
while (keepTrying)
{
    try
    {
        this.UpdateFields();
    }
    catch (Exception e)
    {
        // Either log the error or set keepTrying = false to stop trying
    }
}

如果要嘗試x次然后放棄,則將while循環更改for循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM