4 つの異なるジョブを並行して実行しているアプリケーションがあります。並列タスク ライブラリを使用します。
コードは次のようになります。
while (true)
{
var fetch = new FetcherHandler();
var tasks = new Task[4];
tasks[0] = Task.Factory.StartNew(fetch.GetJobs);
tasks[1] = Task.Factory.StartNew(fetch.GetStatusNew);
tasks[2] = Task.Factory.StartNew(fetch.GetJobsForStatus);
tasks[3] = Task.Factory.StartNew(fetch.GetStatusOld);
Task.WaitAll(tasks);
Thread.Sleep(10000);
}
これら 4 つのタスクはすべて終わりのないループにあるため、上記の thread.Sleep には到達しません。最初のタスクのコード例:
public void GetJobs()
{
while (true)
{
try
{
handler.GetNewJob();
}
catch (Exception exception)
{
var mail = new MailService();
mail.SendExeption("Error has accured in GetJobs", exception);
throw;
}
}
}
Thread.Sleep(15000); }}
上記のコードはうまく機能し、いくつかのジョブを実行してから 15 秒間スリープしてから、再び実行します。例外が発生すると問題が発生します。
例外は問題なくキャッチされ、メールが送信されますが、スレッドは例外の後のループで継続しないため、GetNewJob() メソッドが再度実行されることはありません。
例外が発生したときにスレッドに何が起こるか、スレッドを「保存」して続行できるようにする方法はありますか?