私の状況では、ジョブを実行するために複数のスレッドを作成しています。たとえば、「ジョブは何らかのデータを処理することです」と言うことができます。ユーザーが「停止」ボタンを押すとすぐに、これらすべてのスレッドを中止し、データベース内のジョブのステータスを更新したいと考えています。
internal void CreateJobThread(Job job)
{
Interlocked.Increment(ref _threadCounter);
ThreadPool.QueueUserWorkItem(StartJobThread, job);
}
StartJobThread はジョブを実行している関数です。
internal void StartJobThread(object input)
{
try
{
//Do something
}
catch (Exception ex)
{
//Catch exception
}
finally
{
Interlocked.Decrement(ref _threadCounter);
}
}
現在実行中のすべてのスレッドをキャンセルする方法を教えてください。また、進行中のジョブの ID を取得するにはどうすればよいですか。データベースでステータスを更新できるようにします。