任务中异常处理的最佳实践
概述
在 System.Threading 中管理异常.Tasks.Task
C# 5.0 及更高版本
在 C# 5.0 及更高版本中,async 和 wait 简化异常处理。异步方法不使用ContinueWith,而是允许直接使用try/catch块。
try { // Start the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // Await the task. await task; } catch (Exception e) { // Perform cleanup here. }
C# 4.0及以下
对于早期版本的C#,ContinueWith提供了一个替代方法。通过指定 TaskContinuationOptions.OnlyOnFaulted,您可以指定仅在任务发生故障时才应执行延续:
// Get the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
多个延续
多个延续可以处理两种异常并成功案例:
// For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); // If it succeeded. task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion);
统一异常处理的基类
在某些场景下,基类可以提供跨多个类的集中式异常处理机制。您的基类实现可以包含一个方法来管理对ContinueWith的调用中的异常。然而,与上述技术相比,这种方法可能没有明显的优势,特别是在使用 async 和 wait 时。
通过遵循这些最佳实践,您可以有效地处理任务中的异常,从而确保代码的稳定性和可靠性。
以上是如何最好地处理 C# 任务中的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!