我有一个并行执行 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);
}
上面的 thread.Sleep 永远不会到达,因为所有这 4 个任务都处于一个永无止境的循环中。第一个任务的代码示例:
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() 方法将永远不会再次执行。
任何想法当异常发生时线程会发生什么,以及我如何“保存”线程以便它可以继续?