一、异步编程模式
.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)。
二、异步编程实现
1、异步方法
最常用的方法是,使用await/async关键字实现异步编程的开发模式
public async Task TestDoSomeAsync()
{
await Task.Delay(1000*10);
Console.WriteLine("异步方法实现");
}
2、任务并行库
可以利用多核处理器,并发执行多个独立的任务,通过 Task 和 Task<T> 类型实现异步编程
public static void Task()
{
var task1 = Task.Run(() =>
{
Console.WriteLine("Task 1 完成");
});
var task2 = Task.Run(() =>
{
Console.WriteLine("Task 2 完成");
});
Task<int> task3 = Task.Factory.StartNew(() =>
{
Console.WriteLine("Task 3 完成");
return 666;
});
//等待所有任务完成
Task.WaitAll(task1, task2, task3);
}
3、Asynchronous Programming Model(APM模式)
经典的异步编程模式,需要手动创建回调函数,用于处理完成或错误的通知。可以通过 IAsyncResult 设计模式的 Begin 和 End 方法来实现,其中 Begin 方法开始异步操作,而 End 方法在异步操作完成时执行,并返回异步操作的结果。
4、Event-based Asynchronous Pattern(EAP模式)
一种已过时的异步编程模式,需要使用事件来实现异步编程。
三、总结
不同的方法模式各有各的好处,应视情况和场景而定。