C# 异步编程:初学者完全指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程
```html

异步编程简介:C#



异步编程是现代 C# 开发中的关键概念之一。它允许您的应用程序在等待耗时操作(如读取文件、数据库查询或 HTTP 调用)时,不阻塞主执行线程。程序无需等待操作完成,而是可以继续执行其他任务,从而使应用程序更具响应性和效率。



在本教程中,我们将为初学者讲解 C# 中异步编程的基础知识。您将了解 async 和 await 关键字的作用、如何使用 Task 类,并看到实际的代码示例。即使您刚刚开始 .NET 之旅,本文也将帮助您在项目中自信地使用异步编程。



为什么异步如此重要?假设您的应用程序需要从服务器加载数据。在同步模式下,用户界面会“卡住”直到加载完成。异步方法解决了这个问题:界面保持活动状态,而数据在后台加载。



核心概念:async、await 和 Task



什么是 Task?



在 C# 中,异步操作由 Task 类(或用于返回值的 Task<TResult>)表示。Task 是一个在未来完成工作的承诺。它封装了异步操作的状态,并允许您跟踪其完成情况。



创建任务的简单示例:



using System;using System.Threading.Tasks;

class Program{ static void Main() { // 创建一个同步执行的任务 Task task = Task.Run(() => { Console.WriteLine("任务在后台执行"); });

task.Wait(); // 等待任务完成 }}


async 和 await 关键字



async 关键字告诉编译器该方法包含异步代码。await 关键字会暂停方法的执行,直到等待的任务完成,同时不会阻塞线程。



重要规则:标记为 async 的方法必须返回 Task、Task<T> 或 void(用于事件处理程序)。



基本示例:



using System;using System.Threading.Tasks;

class Program{ static async Task Main(string[] args) { Console.WriteLine("开始工作"); // 异步调用 await PerformLongOperationAsync(); Console.WriteLine("工作完成"); }

static async Task PerformLongOperationAsync() { Console.WriteLine("启动耗时操作..."); // 模拟延迟(例如 HTTP 请求) await Task.Delay(2000); Console.WriteLine("操作完成"); }}


请注意:使用 await Task.Delay(2000) 时,线程不会阻塞 2 秒。相反,控制权会返回给调用代码,2 秒后执行会从该点继续。



异步操作的实用示例



异步读取文件



最常见的场景之一是文件处理。.NET 提供了内置的异步 I/O 方法:



using System;using System.IO;using System.Threading.Tasks;

class FileExample{ public static async Task ReadFileAsync(string filePath) { using (StreamReader reader = new StreamReader(filePath)) { string content = await reader.ReadToEndAsync(); Console.WriteLine(content); } }

static async Task Main() { string path = "example.txt"; // 创建测试文件 await File.WriteAllTextAs ```

博客

书籍推荐