代码之家  ›  专栏  ›  技术社区  ›  Pavel Radzivilovsky

[…]异步和Begin[…].net异步API之间的区别

  •  15
  • Pavel Radzivilovsky  · 技术社区  · 14 年前

    有人能解释一下Begin[…]/End[…]异步API模式和.NET3.5中更高版本的[…]异步模式之间的区别吗?

    • 为什么人们更喜欢一种模式而不是另一种?

    例如,Socket.beginacept()和Socket.acceptsync()。

    2 回复  |  直到 14 年前
        1
  •  11
  •   Julien Lebosquain    14 年前

    MSDN会比我更好地回答这个问题:

    http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

    这些增强的主要功能 是避免重复 分配和同步 大容量时的对象 异步套接字I/O。开始/结束 当前实现的设计模式 需要System.IAsyncResult对象 为每个异步

        2
  •  18
  •   Stephen Cleary    12 年前

    *Async 方法(包括相应的 *Completed Event-Based Asynchronous Pattern . 旧的(但仍然完全有效) Begin* End* 是一种叫做 Asynchronous Programming Model 这个 Socket *异步

    APM和EBAP之间最大的区别是用于完成通知的线程。APM将回调线程池线程(除非请求同步完成)。EBAP将使用跨框架策略回调UI线程(如果操作是从UI线程启动的)。

    然而,APM和EBAP都被一种更灵活的方法所取代 Task Parallel Library . 由于TPL可以很容易地包装APMs,旧的类很可能不会直接更新;扩展方法用于提供 Task 旧APM方法的等价物。

    更新2012-07-14: 当我说“旧的课程可能不会直接更新”时,我错了。出于性能方面的考虑,BCL/TPL团队决定审查每种BCL类型,并直接添加TAP方法,而不是使用扩展方法。这些更改将出现在.NET4.5中。