快速业务通道

浅谈.NET下的多线程和并行计算(十一).NET异步编程模型基础 下

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
alBytesToReceive == 0L) ? 100 : ((int)((100L * progress.BytesReceived)  / progress.TotalBytesToReceive)));
       asyncOp.Post(this.reportDownloadProgressChanged, new  DownloadProgressChangedEventArgs(num, asyncOp.UserSuppliedState, progress.BytesReceived,  progress.TotalBytesToReceive));
     }
   }
}

MSDN中有这么一段描述:为了使类正确运行,应当使用给定应用程序模型(包括 ASP.NET 和 Windows 窗体应用程序)的适当线程或上下文调用客户端事件处理程序,这一点很重要。我们提供了两个重要的帮 助器类,以确保您的异步类在任何应用程序模型中都能正确运行,这两个帮助器类是 AsyncOperation 和 AsyncOperationManager。AsyncOperationManager 提供了 CreateOperation 方法,该方法会返回一个 AsyncOperation。方法名称Async 方法调用 CreateOperation,类使用返回的 AsyncOperation 跟踪异步 任务的生存期。若要向客户端报告进度、增量结果和完成,请调用 AsyncOperation 的 Post 和 OperationCompleted 方法。AsyncOperation 负责将对客户端事件处理程序的调用封送到适当的线程和上 下文。

7) 当为了提供兼容性需要在同一个类上公开基于事件的模式和 IAsyncResult 模式时,同时公开这 两种模式。例如,如果已经释放了一个使用 IAsyncResult 模式的 API,则需要保留 IAsyncResult 模式 以提供向后兼容性。

8)如果得到的对象模型复杂性方面的优点大于分开实现的优点,则在同一个类上实现基于事件的模式 和 IAsyncResult 模式。在一个类上同时公开两种模式比避免公开基于事件的模式效果更好。

9) 如果必须在同一个类上同时公开基于事件的模式和 IAsyncResult 模式,可使用设置为 Advanced 的 EditorBrowsableAttribute 将 IAsyncResult 模式实现标记为高级功能。这指示设计环境(如 Visual Studio IntelliSense)不显示 IAsyncResult 属性和方法。这些属性和方法仍然是完全可用的, 但使用 IntelliSense 的开发人员能够更清楚地查看 API。

我们可以发现从自己实现异步编程,到使用基于IAsyncResult的APM到使用基于事件的APM,使用上越 来越简单,封装的也越来越厉害(自己实现一个WebClient的工作量也很大)。之所以有APM这种模式是因 为.NET的BCL不管是基于线程池的异步操作还是基于IOCP的异步操作都遵从了APM,对于开发人员来说不需 要过多学习就可以掌握大多数提供了异步能力的类库的使用。而对于组件或类库设计师来说就更要遵循这 个模式,并且要根据需要选择提供基于IAsyncResult的APM还是基于事件的APM还是两者都提供。通过这两 篇文章的介绍您应该已经知道了如何去使用基于APM的类库,在之后高级系列文章中我们会介绍如何去实 现自己的APM组件。

在这十篇文章中我们介绍了线程/线程池/线程同步/基于多线程的组件/异步编程模式。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号