编辑
2025-09-24
C#
00

目录

摘要
正文
基本概念
使用async和await的基本步骤
一个简单例子
WinForm下
示例
1. 创建异步方法
2. 在UI中调用异步方法
注意事项

摘要

在C#中,异步方法可以使用async关键字修饰,这是一种非常方便的编程方式。使用异步方法可以使程序更加高效和灵活,因为它们不会阻塞线程并且可以同时执行多个任务。下面我们将介绍如何使用async关键字来定义C#中的异步方法。

首先,让我们来了解一下什么是异步方法。异步方法是指在某个方法中可能需要执行耗时的操作,但是不会阻塞当前的线程,可以在其他线程上执行。在异步方法中,我们可以使用async关键字来标记该方法是异步方法,从而使其在执行完成后继续执行异步代码。

正文

基本概念

  • async: 用于修饰方法,表示这个方法是异步的。一个被async修饰的方法称为异步方法。
  • await: 用于等待异步操作完成。它只能在async方法中使用。

使用asyncawait的基本步骤

  1. 定义异步方法: 使用async关键字定义一个异步方法。异步方法通常返回TaskTask<T>
  2. 调用异步方法: 在异步方法内部,使用await关键字调用另一个异步方法。
  3. 从异步方法返回: 异步方法可以返回void(不推荐),TaskTask<T>。对于返回值的异步方法,使用return关键字返回一个值。

一个简单例子

C#
static async Task Main(string[] args) { string file = "./a.txt"; await File.WriteAllTextAsync(file, Console.ReadLine()); string ret=await File.ReadAllTextAsync(file); Console.WriteLine(ret); }

image.png

WinForm下

C#
private async void btnWrite_Click(object sender, EventArgs e) { await File.WriteAllTextAsync("./x.txt", "hello world"); var ret = await File.ReadAllTextAsync("./x.txt"); }

示例

假设我们有一个WinForms应用程序,我们想要在点击一个按钮时异步地加载一些数据。

1. 创建异步方法

首先,我们创建一个返回Task的异步方法,这个方法模拟了一个耗时的操作,比如从网络加载数据。

C#
private async Task LoadDataAsync() { // 模拟耗时操作 await Task.Delay(5000); // 等待5秒 // 这里可以添加更多的异步操作,比如网络请求等 }

2. 在UI中调用异步方法

然后,在按钮的点击事件处理器中,我们调用这个异步方法。由于这是一个异步调用,UI线程不会被阻塞,UI仍然保持响应。

C#
private async void buttonLoad_Click(object sender, EventArgs e) { await LoadDataAsync(); MessageBox.Show("数据加载完成!"); }

注意,虽然LoadDataAsync是异步的,但是由于我们使用了awaitMessageBox.Show会等到LoadDataAsync完成后才显示。

注意事项

  • 使用async void非常少见,主要用于事件处理器。在其他情况下,应该返回TaskTask<T>
  • 在WinForms应用程序中,使用asyncawait可以避免UI冻结,但要注意不要在UI线程上执行耗时的操作。
  • 异步方法内部的异常应该被捕获和处理,否则可能会导致应用程序崩溃。

通过使用asyncawait,可以编写出既简洁又易于维护的异步代码,显著提高应用程序的响应性和性能。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!