C# 任务并行库与异常
我有一个并行执行4个不同作业的应用程序。我使用并行任务库 代码如下所示:C# 任务并行库与异常,c#,exception,exception-handling,task-parallel-library,C#,Exception,Exception Handling,Task Parallel Library,我有一个并行执行4个不同作业的应用程序。我使用并行任务库 代码如下所示: while (true) { var fetch = new FetcherHandler(); var tasks = new Task[4]; tasks[0] = Task.Factory.StartNew(fetch.GetJobs); tasks[1] = Task.Factory.StartNe
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秒,然后再做一次。当我遇到异常时,问题就出现了
异常被捕获,并向我发送一封邮件,但异常发生后thred不会在循环中继续,因此GetNewJob()方法将永远不会再次执行
你知道当异常发生时线程会发生什么情况,以及我如何“保存”线程以便它可以继续吗?只需删除
抛出代码>在catch子句的末尾
发件人:
可以在catch块中使用throw语句来重新抛出
catch语句捕获的异常
因此,您正在重新触发捕获的异常,这会导致线程中断,不再执行
更多信息:因为您抛出了一个异常,所以异常会在堆栈顶部传播,并中断源线程的执行
catch (Exception exception)
{
var mail = new MailService();
mail.SendExeption("Error has accured in GetJobs", exception);
throw; //THIS LINE !
}
你可以使用一个事件来引发它,比如说,异常caught(…)
,并在你的程序中倾听该事件。与你的问题无关,但等待无休止的任务有什么意义?谢谢!你知道这个抛出是杀死整个应用程序还是只杀死线程?