我有一个运行许多异步任务的Windows服务,但是我遇到了捕获异常并将它们返回给调用方法的问题。在下面的伪代码示例中,try / catch只是停止整个服务而不是运行堆栈。在异步任务中实现Try / Catch的最佳方法是什么?
foreach (var t in tables)
{
try
{
new Task(async () =>
{
try
{
//Do stuff
}
catch (DataError e)
{
throw e;
}
catch (Exception e)
{
throw e;
}
}
};
}
catch (Exception e)
{
return new DatabaseActionResult();
}
}
最终,无论在任何任务中发生什么,我都想捕获并返回 DatabaseActionResult 对象。但是,一旦 throw e 发生,它就完全关闭了服务,其他任何Try / Catch块都没有捕获任何东西。
如果没有“等待”任务,我怎样才能实现这项工作?
答案 0 :(得分:-3)
在我看来,async旨在用于等待设计错误捕获。我没有看到你想要做的事情的好方法。
如果你想要更好地控制错误的处理方式而不必等待任务,你可以明确地在一个单独的线程中运行任务,而不是让异步处理它。