try-catchブロックで囲んだコードセクションがあります。私が期待した結果が得られなかったので、私はこれをしました。しかし今、私は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
ishエラー。
100レコードを挿入した後にエラーが発生した場合(500を挿入する必要がある場合)、100(私も自分自身にメールを送信したカウンタがある)、そして成功メールそれが終わった後。しかし、それは私が見ているものです。私は後でエラーメールと成功メールの両方を受け取る。
誰でも私のためにこれを明確にすることはできますか?
EDIT:コメントはかなり話題をオフに行ってきましたので
、私はうまくいけば芽でそのニップに私のPSUDOcodeを編集します。ここに行く:
try
{
DoSomeEntityFrameworkStuff();
SendASuccessEmailIfAllIsWell();
}
catch
{
SendAFailureEmailIfSomethingBadHappens();
}
これは当てはまりません。あなたはどこか他の場所から呼び出しているかもしれませんが、例外をスローする行にブレークポイントを前後に置いてみてください。例外行の後に始まります。 –
あなたの関数はどこかの非同期要求(クライアント側)おそらくタイマーやクライアント側のイベントを通じて複数回に分かれていますか? –
@AliBaig私はもっと同意できませんでしたが、それは本当です。完全に混乱させる。私は本番環境(これが起こっているところ)でデバッグする方法がなく、開発サーバー上で完全に動作します。おそらく、EntityFrameworkの何かが、他のものとは別の例外をスローすることが許されていると思っていました。それが私の正気を維持しなければならない唯一のアイデアです。つまり、実際にはハードウェア障害が混乱の原因になっている可能性があります(不良RAMまたはランダムビットを反転させる何か他のもの)。 – FlipperBizkut