C# 异常后如何继续执行?
我使用的API可以访问网站(如exchange)上的只读数据,用于股票/价格。它工作得很好,但有时当我让应用程序运行时,会抛出一个异常,如TaskCanceledException 我如何安全地忽略这些并继续执行相同的函数 因为如果函数调用失败,不会发生什么坏事,因为我只是显示价格,这样它就可以跳过一些函数调用,而不会给用户带来任何问题 我必须这样做吗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.
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只想记录和接受特定类型的异常,并确保在该异常类型上设置了特定属性,该怎么办。