在异步编程领域,有效管理异常至关重要。使用 System.Threading.Tasks.Task
C# 5.0 及更高版本:Async 和 Await 来救援
C# 5.0 及更高版本引入了革命性的 async 和 wait 关键字,为异常处理提供了简化的解决方案。这些关键字允许您以线性方式编写代码,而编译器将其转换为使用任务和异步编程模式。
要采用这种方法,只需将代码包装在指定方法内的 try-catch 块中async 关键字。
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 及以下版本: TaskContinuationOptions
对于早期版本的 C#,我们可以利用从 TaskContinuationOptions 枚举接受参数的 ContinueWith 重载。这允许我们指定延续任务的执行条件。
具体来说,使用 OnlyOnFaulted 选项可确保仅当先行任务抛出异常时才执行延续任务。
// Get the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
处理非异常情况
处理在 C# 4.0 及更低版本中,我们可以为同一个先行任务创建多个ContinueWith 任务。例如,我们可以有一个在成功完成后执行的任务:
// Get the task. var task = new Task<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); // If it succeeded. task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); // Run task. task.Start();
以上是如何有效处理C#任务异常?的详细内容。更多信息请关注PHP中文网其他相关文章!