在现代 C# 开发中,异步编程 已成为提升程序性能和响应能力的关键技术。而 Task 类正是 .NET 中实现C# Task 编程模型的核心组件。本文将手把手教你如何创建 Task、启动任务,并掌握多种任务等待方式,即使你是编程小白,也能轻松上手!
在 C# 中,Task 表示一个异步操作。它属于 System.Threading.Tasks 命名空间,是 .NET 提供的用于管理并发和异步操作的高级抽象。相比传统的 Thread,Task 更轻量、更高效,且支持返回值、异常处理和链式调用。
创建 Task 有多种方式,下面介绍最常用的几种:
using System;using System.Threading.Tasks;class Program{ static void Main() { // 创建一个不返回值的任务 Task task = new Task(() => { Console.WriteLine("任务正在执行..."); Task.Delay(1000).Wait(); // 模拟耗时操作 Console.WriteLine("任务完成!"); }); task.Start(); // 必须手动启动 task.Wait(); // 等待任务完成 }} 注意:使用构造函数创建的 Task 不会自动运行,必须调用 Start() 方法。
Task.Run 是更简洁、更常用的方式,它会自动将任务调度到线程池中执行:
Task task = Task.Run(() =>{ Console.WriteLine("使用 Task.Run 执行任务"); Task.Delay(1000).Wait();});task.Wait(); // 等待完成 Task<int> task = Task.Run(() =>{ Console.WriteLine("计算中..."); Task.Delay(1000).Wait(); return 42;});int result = task.Result; // 获取结果(会阻塞当前线程直到完成)Console.WriteLine($"结果是:{result}"); 在 多线程开发 中,如何“等待”任务完成是一个关键问题。C# 提供了多种等待机制:
调用 task.Wait() 会让当前线程一直等待,直到任务完成。这是最简单但可能造成 UI 卡顿的方式,不建议在 UI 线程中使用。
访问 task.Result 也会阻塞当前线程,直到任务完成并返回结果。
这是现代 C# 异步编程的最佳实践。使用 async 和 await 可以让程序在等待任务时继续执行其他逻辑,不会阻塞主线程。
using System;using System.Threading.Tasks;class Program{ static async Task Main() { Console.WriteLine("开始执行主方法..."); Task<int> task = Task.Run(async () => { await Task.Delay(2000); // 模拟异步操作 return 100; }); Console.WriteLine("正在等待任务完成..."); int result = await task; // 非阻塞等待 Console.WriteLine($"任务完成,结果是:{result}"); }} 当需要等待多个任务时,可以使用 Task.WaitAll(全部完成)或 Task.WaitAny(任意一个完成):
Task t1 = Task.Run(() => { Task.Delay(1000).Wait(); Console.WriteLine("任务1完成"); });Task t2 = Task.Run(() => { Task.Delay(1500).Wait(); Console.WriteLine("任务2完成"); });// 等待所有任务完成Task.WaitAll(t1, t2);Console.WriteLine("所有任务已完成!"); 通过本文,你已经掌握了 C# 中 Task 的基本创建方法和多种任务等待策略。记住:
Task.Run 而不是手动构造 + Startasync/await 避免阻塞Wait() 和 Result 的阻塞特性,谨慎使用掌握这些知识,你就迈入了 C# 异步编程 和 多线程开发 的大门。继续练习,你将能构建出高性能、高响应的应用程序!
关键词回顾:C# Task、异步编程、任务等待、多线程开发
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251211742.html