質問

しているWindowsサービスの記述クライアントまで、フルのC#.本サービスのspawnsのスレッドは:

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));
    }
  }
}

置いています。眠りをした後、カップルの場合、データベースがなくなりましたので返3Gbログファイルのデータベース接続エラー。

このため、最近になっています複数インスタンスがoff.............Error()の声ログの"システム。InvalidOperationException:このSqlTransaction完了;がない"例外としてそれは一度もありません。サービスとすることができた日でしかない。がログされます。

そうすると一部の閲覧を知っている。睡眠はしない理想ですが、なぜいけないの来ますか?

役に立ちましたか?

解決

掘りだす。貼デバッガに関する荒目!

きの少なくとも以下の可能性

  1. ロギングシステムの掛;
  2. スレッドの終了は、イブレア城、イブレアのサービスもあるのでその他の部品は論理エラーになります。

そして、そのほとんどないの

  • Sleep()を掲げています。

いずれの場合に付した上で、デバッガができるかどうかのスレッドがまだあるかどうかは本当に掛けています。

他のヒント

置いています。眠りをした後、カップルの場合、データベースがなくなりましたので返3Gbログファイルのデータベース接続エラー。

いってくださいというふうに思ってより良いオプションのようになってるとロギングシステムの捕捉の重複をなすように、以前のメッセージを繰り返しN"です。

とまで書いていて発見したんですが、標準につき開く接続でき瞬間があり、最も早い機会に、より広がる大きな機能のお願い(でもそれでいいのかもしれは人工物の実証コード、お申し込みは、実際に書き込まれる様に扱う。

いざと言うので報告するエラーで説明するということでしょうか このハンドラ で報告する。その理由も明らかでないが、コードスニペットというもの"っ"なんだそのご説明;んこされていると思いますが、なんとして例外的にとらわれることどこか他の、あなたのコードでこだわったどこか他にあります。

私も同じ問題です。移動の睡眠以外の回線の例外ハンドラー固定に問題私のようになります:

bool hadError = false;
try {
  ...
} catch (...) {
  hadError = true;
}
if (hadError)
  Thread.Sleep(...);

を遮断するスレッドにあるようには見えない作品の文脈で例外ハンドラです。

ただしてみました モニターパルス (保のスレッドはスレッド管理の実行前にこの)スレッドの取得をいいの?その作品は、それにおいて少おねじ論理です。

からのコードだけを掲載している後、例外がスローされますこのシステムは絶対にできる再起動など場合には例外からdoStuff()の制御フロー通過後の10分のを待)openConnection()は、通closeConnection().

しかしその他っているため、貼るだデバッガと見するものではありませんでした。

います。睡眠(10 * 60 * 1000)

ったものを十分に行ったものでも関係があるようだThreadInterruptedExceptionsている中にスローされ、約10分寝かに変更コード:

private void ThreadWorkerFunction()
{
  DateTime? timeout = null;

  while (!_stop)
  {
    try
    {
      if (timeout == null || timeout < DateTime.Now)
      {
        openDatabaseConnections();

        doStuff();

        closeDatabaseConnections();
      }
      else
      {
        Thread.Sleep(1000);
      }
    }
    catch (ThreadInterruptedException tiex)
    {
      log.Error("The worker thread was interrupted... ignoring.", tiex);
    }
    catch (Exception ex)
    {
      log.Error("Something went wrong.", ex);

      timeout = DateTime.Now + TimeSpan.FromMinutes(10);
    }
  }
}

ほかに具体的には"をご覧くださThreadInterruptedExceptionこで感じより安全にすべての寝起こる内tryブロックで何か予期せぬことが起こがログされます。私はこの答えがあってさらに詳しくご案内します。

迷いことを探します。睡眠問題を自作してました。この可能か否かは問わない関連が合わない場合にはdoSomething()が例外をスローし,closeDatabaseConnections()をすることができなど、潜在的リソース漏れ..いること、最後にブロックです。だけに何かを考えています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top