定期的に、本番環境でWindowsサービスをシャットダウンすると、再現できない問題が発生します。それが再び起こるまでに数ヶ月かかることがあります。
私は問題を解決するためにいくつかの診断を入れています。私が見ていることの1つは、アプリケーションのシャットダウンを開始してから60秒間システムスレッドプールにイベントを追加することです。アプリケーションは、最大10秒以内に正常にシャットダウンする必要があります。
このイベントでは、プロセスの残りの実行中のスレッドをイベントログにトレースしたいと思います。
System.Diagnostics.Process.GetCurrentProcess.Threadsを使用して実行中のスレッドを取得できます。これらのスレッドオブジェクトには、ネイティブのWin32スレッドIDなどがあります。
これらのスレッドIDから、現在のプロセスでそれらが表す管理対象スレッドに戻る方法があるかどうか疑問に思いました。私がこれを行おうとしている理由は、スレッドプールや他のスレッドに対して、それらの目的を表す名前を付けるためです。これらを取り戻すのに非常に役立ちます。