代码之家  ›  专栏  ›  技术社区  ›  lockedscope L42

ASP.NET中的异步调用

  •  2
  • lockedscope L42  · 技术社区  · 16 年前

    在这 sample ,创建了两个线程;由BeginInvoke创建的工作线程和由SendAsync方法创建的I/O完成线程。

    但是 another author 在他不明确的重叠例子中,不要推荐这个。

    我想在ASP.NET页中使用sendAsync或…async,我想使用pageAsyncTask。 但是,其BeginEventHandler要求返回AsyncResult,而SendAsync不返回。

    Afaik,基于事件的异步模式是最推荐的方法,所以我们如何在不创建两个线程和损害性能的情况下调用sendAsync或任何…异步方法?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Amgad Fahmi    16 年前

    实际上,如果将beginivoke和endinvoke用于delegates或threadpool.workeritem,则不会对应用程序产生任何影响,因为它们使用的线程与ASP.NET使用的throw IIS的线程相同。 所以现在您只有两个异步调用的解决方案,首先您将编写自己的线程类(但要小心) 其次,使用pageasynctasks(推荐)这一个更安全,它的设计是为了与ASP.NET完美配合。

    这不是对性能的伤害,而是关于如何以及何时使用ASNYC任务。 如果您的进程真的需要很长时间才能完成(因为IIS将等待所有进程完成,甚至是ASNYC进程,然后开始呈现),那么您必须转到异步解决方案,而不是它将使性能下降。

    注:

    addOnPrerenderCompleteAsync和registerAsyncTask之间存在差异 在这里的实现中,它们看起来是相同的,但是在第二个实现中

    1. 您可以访问当前的HTTP 背景、模仿、文化和 剖面数据等
    2. 您可以并行运行许多任务
    3. 您有超时事件,可以 确定页面中的超时 属性
    4. 可以调用RegisterAsyncTask 在一次请求中多次 注册几个异步操作
    推荐文章