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秒間スリープしてからもう一度やります。私は例外が発生したときに問題が発生します。
例外は正常に捕捉され、私にメールを送信しますが、例外後にループ内でthredが続行されないため、GetNewJob()メソッドは決して再び実行されません。
例外が発生したときにスレッドに何が起こり、どのようにスレッドを「保存」して続けることができますか?
質問には関係ありませんが、未処理のタスクを待っているのは何ですか? – hvd