如何在例外后继续执行?

时间:2018-03-09 01:30:55

标签: c# .net exception exception-handling try-catch

我正在使用API​​来访问网站上的只读数据,例如交易所,用于股票代码/价格。它工作得很好,但有时当我离开应用程序运行时会抛出一个异常,例如" TaskCanceledException"。

如何安全地忽略这些并继续执行相同的功能?

因为如果函数调用失败,没有什么不好的事情发生,因为我只是显示价格,所以它可以跳过一些函数调用,而不会给用户带来任何问题。

我必须做这样的事吗?

try
{
    this.UpdateFields ( );
}
catch ( Exception ex )
{
    Console.WriteLine ( ex );
    Console.WriteLine ( "Continue" );
    this.UpdateFields ( );
}
每次发生异常都

等等?

2 个答案:

答案 0 :(得分:3)

我认为更明智的方法是在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
            }

        }
    }

答案 1 :(得分:2)

我在评论中问你:

  

你想做什么?如果出现错误,您想再试一次吗?

你回答:

  基本上是@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
    }
}

如果您想尝试while次,然后放弃,请将for循环更改为x循环。