我有一個應用程序正在並行執行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