捕获 System.Threading.Tasks.Task
随着 async 和 wait 关键字的引入,任务中的异常处理变得更加简单明显更简单。您可以在 async 方法中使用 try-catch 块来捕获异常,如下所示:
try { var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); await task; } catch (Exception e) { // Perform cleanup here. }
请记住使用 async 关键字标记封装方法以启用 wait。
对于早期的 C# 版本,您可以使用接受 TaskContinuationOptions 的ContinueWith 重载来处理异常value:
var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
TaskContinuationOptions.OnlyOnFaulted 指定仅当前面的任务抛出异常时才执行延续。
您还可以通过多次调用ContinueWith来处理非异常情况:
task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); task.Start();
这些方法提供了任务中异常处理的不同方法,提供了灵活性和基于定制的在您的 C# 版本上。
以上是如何有效处理C#任务异常?的详细内容。更多信息请关注PHP中文网其他相关文章!