特定のツールを使用してアプリを検査しています。アプリがブレークポイントに到達したら、特定の関数を呼び出してイミディエイト ウィンドウからツールを呼び出すことができます。ツール自体はマルチスレッドの Windows アプリであるため、いくつかのタスクが生成されます。
私が直面している問題は、ツールからスケジュールされた一部のタスクが実行されないことがあり、ツールが無期限にハングすることです。ThreadPool.QueueUserWorkItem
withまたは withでタスクを生成するTask.Run
と、どちらもツールがハングし、これらのタスクが実行されません。代わりにクラスを使用するとThread
、ツールは完全に機能します。
また、イミディエイト ウィンドウからではなく、通常どおり起動した場合、ツールは (タスクで) 動作します。したがって、この問題は、タスクとイミディエイト ウィンドウを使用する場合にのみ発生します。
したがって、私の質問は、一部のタスクが実行されない理由は何でしょうか? イミディエイト ウィンドウが他のすべてのスレッドをブロックし、ブレークポイントにヒットしたスレッドでコマンドを実行することは理解していますが、イミディエイト ウィンドウ スレッドから生成されたスレッド/タスクは引き続き実行する必要があります。
私のアプリとツールはどちらも C# です。Visual Studio Professional 2015 Update 1 を使用しています。