参考以下代码,说明我想要实现的目标。
ProcessRow有一些仅在其末尾的遗留代码 是确定的那一行的评估/中止,所以它抛出 如果要中止,则为ZeroInvoiceException,但如果不是,则为Completes。 所以我想要发生的是如果一排 抛出ZeroInvoiceException行被中止 否则完成。我用过的outerscope 因为如果在任何行中发生异常 我希望整个操作回滚。 这是否有意义,如果有的话 TransactionScopeOption应该是 因为我看不到这3个中的任何一个适用于此? 我想避免的是编写额外的代码 确定是否应该执行ProcessRow 所有这一行。
编辑:错过了循环抱歉。using (TransactionScope outerscope = new TransactionScope())
{
foreach(var row in rows)
{
using (TransactionScope innerscope = new TransactionScope())
{
try
{
ProcessRow(row);
innerscope.Complete();
}
catch (ZeroInvoiceException)
{
//DO NOTHING MOVE ON TO NEXT ROW
}
catch (Exception ex)
{
throw ex;
}
}
}
outerscope.Complete();
}