我有这样的事情:例外异步循环
void GenerateReports() {
foreach (var employee in employees) {
GenerateReport(employee);
}
}
GenerateReport需要很长时间,我不希望阻止我的UI线程,所以我运行一个单独的线程此方法。
但是,GenerateReport偶尔会引发异常。我想在我的UI线程中处理每个异常,并继续与下一个员工。如何在异步生成报告时执行此操作?如果我把GenerateReport在另一个线程,foreach循环会非常快,并在同一时间创建的所有报告:
void GenerateReports() {
foreach (var employee in employees) {
GenerateReportAsync(employee, OnDoneCallback); // returns immediately
}
}
我还是要同时创建一个报告,而是在一个单独的线程,处理每位员工的例外情况。我怎样才能最好地实现这一点?
您是否使用.NET 4.0并且可以使用TPL? TPL可以轻松检查任务中的异常。 – 2012-01-05 18:42:10
我目前使用的是.NET 3.5,但我认为如果这样可以让事情变得更容易,我的应用程序升级到.NET 4.0。 – Sjoerd 2012-01-05 18:46:52
好的,你喜欢3.5的答案吗?我个人发现4.0 TPL使处理异步进程变得容易很多,但是如果有令人信服的理由让你想保持3.5的状态,那也不错。 – 2012-01-05 18:53:40