有两种方法可以执行此操作,具体取决于您所使用的语言版本。
C#5.0以上
您可以使用
async和
await关键字为您简化很多操作。
async并且
await被引入该语言以简化使用Task Parallel
Library的工作,从而避免了您必须使用
ContinueWith并允许您以自上而下的方式继续编程。
因此,您可以简单地使用
try/
catch块来捕获异常,如下所示:
try{ // Start the task. var task = Task.Factory.StartNew<StateObject>(() => { }); // Await the task. await task;}catch (Exception e){ // Perform cleanup here.}请注意,封装上述内容的方法 必须 使用已
async应用关键字,这样您才可以使用
await。
C#4.0及以下
您可以使用从枚举中获取值的
ContinueWith重载来处理异常,如下所示:
TaskContinuationOptions
// Get the task.var task = Task.Factory.StartNew<StateObject>(() => { });// For error handling.task.ContinueWith(t => { }, context, TaskContinuationOptions.OnlyOnFaulted);在
OnlyOnFaulted该成员
TaskContinuationOptions枚举指示应继续 只 当先行任务抛出异常执行。
当然,您可以有多个调用来
ContinueWith取消同一先决条件,从而处理非例外情况:
// Get the task.var task = new Task<StateObject>(() => { });// For error handling.task.ContinueWith(t => { }, context, TaskContinuationOptions.OnlyOnFaulted);// If it succeeded.task.ContinueWith(t => { }, context, TaskContinuationOptions.OnlyOnRanToCompletion);// Run task.task.Start();


