异步编程:异步编程模型(APM)
作者:网络转载 发布时间:[ 2013/4/3 9:49:50 ] 推荐标签:
异步编程模型(APM)是.NET1.0的时候已经推出的古老异步编程模式,此模式基于IAsyncResult接口实现。
随着技术的发展,又在“.NET1.0异步编程模型(APM)”之后推出了“.NET2.0基于事件的编程模式”及“.NET4.X基于任务的编程模式”两种异步编程模式。尽管在新的设计上我们推荐都使用“.NET4.0基于任务的编程模式”,但我还是计划整理出旧版的异步编程模型,因为:
1、在一些特殊场合下我们可能觉得一种模式更适合;
2、可以更充分认识三种模式之间的优劣,便于选择;
3、很多遗留的代码包含了旧的设计模式;
4、等等…
示例下载:异步编程:IAsyncResult异步编程模型.rar
IAsyncResult设计模式----规范概述
使用IAsyncResult设计模式的异步操作是通过名为 Begin*** 和 End*** 的两个方法来实现的,这两个方法分别指代开始和结束异步操作。例如,FileStream类提供BeginRead和EndRead方法来从文件异步读取字节。这两个方法实现了 Read 方法的异步版本。
在调用 Begin*** 后,应用程序可以继续在调用线程上执行指令,同时异步操作在另一个线程上执行。(如果有返回值还应调用 End*** 来获取操作的结果)。
1)Begin***
a)Begin*** 方法带有该方法的同步版本签名中声明的任何参数。
b)Begin*** 方法签名中不包含任何输出参数。方法签名后两个参数的规范是:第一个参数定义一个AsyncCallback委托,此委托引用在异步操作完成时调用的方法。第二个参数是一个用户定义的对象。此对象可用来向异步操作完成时为AsyncCallback委托方法传递应用程序特定的状态信息(eg:可通过此对象在委托中访问End*** 方法)。另外,这两个参数都可以传递null。
c)返回IAsyncResult对象。
// 表示异步操作的状态。
[ComVisible(true)]
public interface IAsyncResult
{
// 获取用户定义的对象,它限定或包含关于异步操作的信息。
object AsyncState { get; }
// 获取用于等待异步操作完成的System.Threading.WaitHandle,待异步操作完成时获得信号。
WaitHandle AsyncWaitHandle { get; }
// 获取一个值,该值指示异步操作是否同步完成。
bool CompletedSynchronously { get; }
// 获取一个值,该值指示异步操作是否已完成。
bool IsCompleted { get; }
}
// 常用委托声明(我后面示例是使用了自定义的带ref参数的委托)
public delegate void AsyncCallback(IAsyncResult ar)
2)End***
a)End*** 方法可结束异步操作,如果调用 End*** 时,IAsyncResult对象表示的异步操作还未完成,则 End*** 将在异步操作完成之前阻塞调用线程。
b)End*** 方法的返回值与其同步副本的返回值类型相同。End*** 方法带有该方法同步版本的签名中声明的所有out 和 ref 参数以及由BeginInvoke返回的IAsyncResult,规范上 IAsyncResult 参数放后。
i. 要想获得返回结果,必须调用的方法;
ii. 若带有out 和 ref 参数,实现上委托也要带有out 和 ref 参数,以便在回调中获得对应引用传参值做相应逻辑;
现在我们清楚了IAsyncResult设计模式的设计规范,接下来我们再通过IAsyncResult异步编程模式的三个经典场合来加深理解。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11