我有一个应用程序正在并行执行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 2012-04-16 08:39:24