我想不出自己测试它的好方法,所以问这个问题: 假设我有一个事务列表,我已经将它们逐个发送到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中的下一个项目
答案 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,您可以在处理异常后执行代码。