处理for-each循环中的项的异常

时间:2014-06-04 13:30:22

标签: c#

我想不出自己测试它的好方法,所以问这个问题: 假设我有一个事务列表,我已经将它们逐个发送到Web服务,并且webservice调用的结果可能是成功,失败或者可能发生了一些奇怪的事情,它只是崩溃了。 所以我的整体代码是这样的:

for each (transaction)
{
   try
   {
      string result = webservice.Call(transaction);
      if result == "Faild"
      {
          // log some errors.
      }
    }
    catch (Exception ex)
    {
       // Log some errors, stack trace, etc...
    }
}

所以我的问题是:如果它成为其中一个事务调用的异常,那么整个事情是否会停止?或者它将退出异常块并继续前进到for-each中的下一个项目

4 个答案:

答案 0 :(得分:6)

catch是一个捕获物,它将执行捕捉应该做的事情。

除非重新抛出异常,否则循环不会中断。

如果您想在告诉用户出现问题之前完成整个循环,您可以这样做 像这样的东西:

List<Exception> exceptions = new List<Exception>();
foreach (var transaction in transactions)
{
   try
   {
      string result = webservice.Call(transaction);
      if result == "Faild"
      {
          // log some errors.
      }
    }
    catch (Exception ex)
    {
       exceptions.Add(ex);
    }
}

if (exceptions.Any())
    throw new AggregateException(exceptions);

答案 1 :(得分:2)

继续循环,直到您没有更多要循环的事务为止。这就是try catch的有用之处。

答案 2 :(得分:1)

由于try / catch在循环内部,因此它将针对每个事务调用运行。 如果你把循环放在try中,那么它会在第一个例外时爆炸。

答案 3 :(得分:0)

使用try { ... } catch() { ... } finally { ... }查看有关使用{{1}}的信息here,您可以在处理异常后执行代码。