C# で記述された Windows サービスがあります。サービスは、これを行うスレッドを生成します。
private void ThreadWorkerFunction()
{
while(false == _stop) // stop flag set by other thread
{
try
{
openConnection();
doStuff();
closeConnection();
}
catch (Exception ex)
{
log.Error("Something went wrong.", ex);
Thread.Sleep(TimeSpan.FromMinutes(10));
}
}
}
データベースがなくなって数回後に Thread.Sleep を入れ、データベース接続エラーでいっぱいの 3Gb ログ ファイルに戻ってきました。
これは何ヶ月も正常に動作していますが、最近、log.Error() ステートメントが「System.InvalidOperationException: This SqlTransaction has completed; it is no longer available」という例外をログに記録し、その後二度と戻ってこないというインスタンスをいくつか確認しました。 . サービスは何日も実行し続けることができますが、それ以上はログに記録されません。
いくつか読んだことで、Thread.Sleep が理想的ではないことはわかっていますが、なぜ元に戻らないのでしょうか?