即发即忘:异常处理的注意事项
这里提出的问题围绕着实现“即发即忘”时异常的适当处理“ 方法。使用简单吞下异常的扩展方法的最初建议引起了人们的关注,因为它可能会掩盖潜在的错误。
但是,如果真正的目的是忽略任务中发生的任何异常,那么异步扩展方法可以不是最优解。等待任务会通过引入对其完成的依赖来破坏“即发即忘”原则。
在这种情况下,最初提出的同步扩展方法会更合适。但是,为了确保妥善处理预期但可忽略的异常,需要该方法的更复杂版本。
例如,以下方法采用一个参数,该参数定义可接受和可忽略的异常类型列表:
public static void Forget(this Task task, params Type[] acceptableExceptions) { try { task.Wait(); } catch (Exception ex) { // TODO: consider whether derived types are also acceptable. if (!acceptableExceptions.Contains(ex.GetType())) throw; } }
这种方法允许选择性地处理异常,确保只传播意外错误。
重要的是请注意,使用此方法并不能真正使任务“即发即忘”,即完全独立于其完成。但是,它提供了一种忽略特定异常的方法,这些异常是任务预期行为的一部分。
以上是在'一劳永逸”的方法中是否应该忽略异常?的详细内容。更多信息请关注PHP中文网其他相关文章!