【问题标题】:asynchronous calls in asp.netasp.net 中的异步调用
【发布时间】:2010-05-29 22:34:34
【问题描述】:

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

但 another author 在他的 UnsafeQueueNativeOverlapped 示例中,不推荐这样做。

我想在 asp.net 页面中使用 SendAsync 或 ...Async,并且我想使用 PageAsyncTask。 但是,它的 BeginEventHandler 要求返回 AsyncResult,而 SendAsync 不返回。

afaik,基于事件的异步模式是最推荐的方式,那么我们如何调用 SendAsync 或任何 ...Async 方法而不创建两个线程并影响性能?

【问题讨论】:

    标签: asp.net asynchronous


    【解决方案1】:

    实际上,如果您将 beginIvoke 和 endInvoke 用于委托或 ThreadPool.WorkerItem 它不会对您的应用程序产生任何影响,因为它们使用 asp.net 使用的相同线程抛出 iis 所以现在你只有两个解决方案来首先进行异步调用你将编写自己的线程类(但要小心) 第二次使用 PageAsyncTasks(recommended) 这个更安全,它被设计为与 asp.net 完美配合

    这不是关于如何以及何时使用 asnyc 任务而损害性能 如果您的进程确实需要很长时间才能完成(因为 IIS 会等到所有进程甚至是 asnyc 进程都完成然后开始渲染),那么您必须使用异步解决方案,而不是它会降低性能

    注意:

    AddOnPreRenderCompleteAsync 和 RegisterAsyncTask 是有区别的 在那里的实现中,它们看起来相同,但在第二个中

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

    【讨论】:

      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多