前言
微信群里的一个提问引发的这个问题,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); } }