在现代C#开发中,异步编程和并行任务已成为提升程序性能与响应能力的关键技术。其中,Task.ContinueWith 方法是处理任务完成后执行后续逻辑的重要工具。本文将从零开始,详细讲解 ContinueWith 的基本用法、常见场景及注意事项,帮助初学者轻松上手。

ContinueWith 是 System.Threading.Tasks.Task 类中的一个方法,用于在当前任务完成(无论成功、失败或取消)后,自动启动一个新的任务。它实现了“任务链”的概念,非常适合构建复杂的异步工作流。
使用 ContinueWith 可以避免回调地狱(Callback Hell),让代码更清晰、可维护性更强。
下面是一个最简单的 ContinueWith 示例:
using System;using System.Threading.Tasks;class Program{ static void Main() { Task task1 = Task.Run(() => { Console.WriteLine("任务1正在执行..."); // 模拟耗时操作 Task.Delay(1000).Wait(); Console.WriteLine("任务1完成!"); }); Task task2 = task1.ContinueWith(prevTask => { Console.WriteLine("任务2在任务1完成后执行!"); }); // 等待所有任务完成 task2.Wait(); Console.WriteLine("全部完成!"); }}运行结果:
任务1正在执行...任务1完成!任务2在任务1完成后执行!全部完成!如果前一个任务返回了结果(即 Task<TResult>),你可以在 ContinueWith 中访问它:
Task<int> computeTask = Task.Run(() =>{ return 42;});Task resultTask = computeTask.ContinueWith(prev =>{ Console.WriteLine($"前一个任务的结果是: {prev.Result}");});resultTask.Wait();此外,你还可以通过检查 prevTask.IsFaulted 或 prevTask.Exception 来处理异常:
Task faultyTask = Task.Run(() =>{ throw new InvalidOperationException("出错了!");});Task handleException = faultyTask.ContinueWith(prev =>{ if (prev.IsFaulted) { Console.WriteLine($"捕获异常: {prev.Exception?.InnerException?.Message}"); }}, TaskContinuationOptions.OnlyOnFaulted);handleException.Wait();你可以通过 TaskContinuationOptions 枚举来指定 ContinueWith 在什么情况下执行:
OnlyOnRanToCompletion:仅当前任务成功完成时执行OnlyOnFaulted:仅当前任务抛出异常时执行OnlyOnCanceled:仅当前任务被取消时执行ExecuteSynchronously:同步执行延续任务(慎用)虽然 ContinueWith 功能强大,但在 C# 5.0 之后,官方更推荐使用 async/await 语法来实现类似逻辑,因为其代码更简洁、易读:
static async Task Main(){ try { int result = await Task.Run(() => 42); Console.WriteLine($"结果: {result}"); } catch (Exception ex) { Console.WriteLine($"错误: {ex.Message}"); }}不过,在某些高级场景(如动态任务链、自定义调度器等)中,ContinueWith 仍有其独特价值。
通过本文,你已经掌握了 C# 中 并行任务的延续(ContinueWith)的基本用法、异常处理、执行条件控制等内容。记住,ContinueWith 是 异步编程 工具箱中的重要一员,但日常开发中优先考虑 async/await 会让代码更优雅。
希望这篇教程能帮助你深入理解 C#并行任务 和 任务延续 的核心概念。动手实践一下吧!
本文由主机测评网于2025-12-18发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025129651.html