一、异步编程模式
.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模式)
一种已过时的异步编程模式,需要使用事件来实现异步编程。
三、总结
不同的方法模式各有各的好处,应视情况和场景而定。