Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异常后如何继续执行?_C#_.net_Exception_Exception Handling_Try Catch - Fatal编程技术网

C# 异常后如何继续执行?

C# 异常后如何继续执行?,c#,.net,exception,exception-handling,try-catch,C#,.net,Exception,Exception Handling,Try Catch,我使用的API可以访问网站(如exchange)上的只读数据,用于股票/价格。它工作得很好,但有时当我让应用程序运行时,会抛出一个异常,如TaskCanceledException 我如何安全地忽略这些并继续执行相同的函数 因为如果函数调用失败,不会发生什么坏事,因为我只是显示价格,这样它就可以跳过一些函数调用,而不会给用户带来任何问题 我必须这样做吗 try { this.UpdateFields ( ); } catch ( Exception ex ) { Console.

我使用的API可以访问网站(如exchange)上的只读数据,用于股票/价格。它工作得很好,但有时当我让应用程序运行时,会抛出一个异常,如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
            }

        }
    }

我相信更明智的方法是在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循环。

我在评论中问过您:


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

你回答说:


@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循环,然后放弃。

将该尝试。。。抓住方法本身?你想做什么?如果出现错误,您想再试一次吗?谢谢,我不知道我是否尝试过,我会改为这样做,所以我希望它不会返回给调用者。@CodingYoshi基本上是的,因为这个函数是在BG worker中使用计时器调用的。试一试怎么样。。。抓住方法本身?你想做什么?如果出现错误,你想再试一次吗?谢谢,我不知道我是否试过,我会改为这样做,所以我希望它不会被退回给来电者。@CodingYoshi基本上是的,因为此函数是在BG worker中使用计时器调用的。为什么要捕获TaskCanceledException?这只是OP声明要忽略的异常的一个例子。@CodingYoshi:我同意。如果OP只想记录和接受特定类型的异常,并确保对该异常类型设置了特定属性,该怎么办?为什么要捕获TaskCanceledException?这只是OP声明要忽略的异常的一个例子。@CodingYoshi:我同意。如果OP只想记录和接受特定类型的异常,并确保在该异常类型上设置了特定属性,该怎么办。