异步方法调用
异步方法调用或异步方法模式是(多线程)面向对象程式设计中用于异步调用对象的潜在的长期运行方法的一种设计模式[1]。它等价于Allan Vermeulen提出的IOU模式[2][3]。
基于事件的异步模式是异步方法调用的一个变种,开销更大但能更好的表现软件组件对象。.NET框架和Java中的java.util.concurrent.FutureTask
类中使用的基于事件的异步模式使用事件来解决同样的问题。
大部分编程语言中对方法的调用是同步执行的。例如在线程执行体内,即线程的调用函数中,方法的调用就是同步执行的。如果方法需要很长的时间来完成,比方说从Internet加载数据的方法,调用者线程将被阻塞直到方法调用完成。如果不希望调用被阻塞,则可以通过创建新的worker线程并在worker线程中调用方法,在大多数编程环中上这样做可能需要很长的一段代码,尤其是需要小心处理线程过多的额外开销。异步方法调用它通过使用一种立即返回的异步的变体并提供额外的方法来支持接受完成通知以及完成等待改进长期运行的(同步)方法。
活动对象(active object)设计模式通常使用异步方法调用。异步方法调用的一个替代方案是同步的方法调用和未来对象(future object)模式。[4] 在Web浏览器的实现上可以采用异步方法调用,例如浏览器需要在Web页面中的图像加载完成之前将页面显示出来。
参考来源
编辑- ^ Asynchronous Method Invocation. Distributed Programming with Ice. ZeroC, Inc. [22 November 2008]. (原始内容存档于2008年1月5日).
- ^ Vermeulen, Allan. An Asynchronous Design Pattern. Dr. Dobb's Journal. June 1996 [22 November 2008]. (原始内容存档于2009-08-08).
- ^ Nash, Trey. Threading in C#. Accelerated C# 2008. Apress. 2007. ISBN 9781590598733.
- ^ Lavender, R. Greg; Douglas C. Schmidt. Active Object (PDF). [22 November 2008]. (原始内容 (PDF)存档于2012-09-24).
参考文献
编辑- Chris Sells and Ian Griffiths. Appendix C.3: The Event-Based Asynchronous Pattern. Programming WPF 2nd. O'Reilly. 2007: 747–749. ISBN 9780596510374.
- Using asynchronous method calls in C#