我有一段代码,我已经将其包含在try-catch块中。我这样做是因为我没有得到我期望的结果。但是现在,我没有得到我期望的try-catch块的结果。
我的理解是执行try块中的代码。如果抛出异常,catch块会捕获它,然后代码继续运行。
我看到的是try块中抛出异常的代码。然后catch块捕获它,并向我发送一封异常ToString()
的电子邮件。但是,try块中的代码会从中断处继续。我没想到它会在它停止的地方重新开始。我以为已经完成了。
以下是我正在做的一些psudo代码:
try
{
var context = New DbContext();
for(var i = 0; i < 5; i++)
{
var records = ABunchOfRecordsThatIGather(OneHundredAtATime);
foreach(var record in records)
{
context.Add(record);
}
context.SaveChanges();
context.Dispose();
context = New DbContext();
}
SendMeASuccessEmail();
}
catch (Exception ex)
{
SendMeAnEmailOfTheException(ex.ToString());
}
我收到了各种错误(不同的问题),但其中一些错误是System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint
,其中一些是A transport-level error has occurred when receiving results from the server
错误。
无论如何,如果我在插入100条记录后收到错误(并且需要插入500条),我不希望在100之后看到错误(我有一个我自己发邮件的计数器),然后是成功电子邮件它结束了。但是,这就是我所看到的。我稍后会收到错误电子邮件和成功的电子邮件。
有人可以为我澄清这个吗?
修改
由于这些评论几乎完全脱离主题,我将编辑我的PSUDOcode,希望将其扼杀在萌芽状态。这是:
try
{
DoSomeEntityFrameworkStuff();
SendASuccessEmailIfAllIsWell();
}
catch
{
SendAFailureEmailIfSomethingBadHappens();
}
答案 0 :(得分:0)
代码在异常后不会从中断处继续。
基于你的psudo代码,我建议你可以检查3种可能性/事情: