C#异步有多少种实现方式?

2023-06-09,

前言

  微信群里的一个提问引发的这个问题,C#异步有多少种实现方式?首先想要知道C#异步有多少中实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解C#异步实现的方式。

.NET异步编程模式

.NET 提供了执行异步操作的三种模式:

基于任务的异步模式 (TAP) ,该模式使用单一方法表示异步操作的开始和完成。 TAP 是在 .NET Framework 4 中引入的。 这是在 .NET 中进行异步编程的推荐方法。 C# 中的 async 和 await 关键词以及 Visual Basic 中的 Async 和 Await 运算符为 TAP 添加了语言支持。 有关详细信息,请参阅基于任务的异步模式 (TAP)。

基于事件的异步模式 (EAP),是提供异步行为的基于事件的旧模型。 这种模式需要后缀为 Async 的方法,以及一个或多个事件、事件处理程序委托类型和 EventArg 派生类型。 EAP 是在 .NET Framework 2.0 中引入的。 建议新开发中不再使用这种模式。 有关详细信息,请参阅基于事件的异步模式 (EAP)。

异步编程模型 (APM) 模式(也称为 IAsyncResult 模式),这是使用 IAsyncResult 接口提供异步行为的旧模型。 在这种模式下,同步操作需要 Begin 和 End 方法(例如,BeginWrite 和 EndWrite以实现异步写入操作)。 不建议新的开发使用此模式。 有关详细信息,请参阅异步编程模型 (APM)。

C#异步有四种实现方式

C# 异步有多种实现方式,可归纳为以下几类:

1、异步方法(Async Method TAP模式

使用 async/await 关键字实现异步编程,这是比较常用的一种方式。例如:

public async Task TestDoSomeAsync()
{
await Task.Delay(1000);
Console.WriteLine("Async method completed.");
}

2、任务并行库(TPL, Task Parallel Library TAP模式

通过 Task 和 Task<T> 类型实现异步编程,可以利用多核处理器,并发执行多个独立的任务。例如:

Task.Run(() =>
{
Console.WriteLine("Test Task 1 completed.");
}); Task.Run(() =>
{
Console.WriteLine("Test Task 2 completed.");
}); // 等待所有任务完成
Task.WaitAll();

3、Asynchronous Programming Model(APM模式)

这是一种比较古老的异步编程方式,需要手动创建回调函数,用于处理完成或错误的通知。例如:

public void DownloadFile(string url)
{
WebClient client = new WebClient(); // 定义异步操作完成后的回调函数
client.DownloadFileCompleted += (sender, e) =>
{
Console.WriteLine("Test Download completed.");
}; // 开始异步下载
client.DownloadFileAsync(new Uri(url), "file.txt");
}

4、Event-based Asynchronous Pattern(EAP模式)

这是一种已过时的异步编程模式,使用异步事件来实现异步编程。例如:

public class MyClass
{
public event EventHandler<EventArgs> MyEvent; public void DoSomething()
{
// 触发异步事件(注意:此处未使用异步操作)
MyEvent?.Invoke(this, EventArgs.Empty);
}
}

参考文章

https://learn.microsoft.com/zh-cn/dotnet/standard/asynchronous-programming-patterns/

C#异步有多少种实现方式?的相关教程结束。

《C#异步有多少种实现方式?.doc》

下载本文的Word格式文档,以方便收藏与打印。