asp.net中的异步调用

时间:2010-05-29 13:47:46

标签: asp.net asynchronous

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

这不仅仅是关于如何以及何时使用asnyc任务而损害性能 如果你的进程真的需要很长时间才能完成(因为IIS会等到所有进程完成甚至是asnyc然后开始渲染)然后你必须转到异步解决方案而不是它会在性能上缩减

注意:

AddOnPreRenderCompleteAsync和RegisterAsyncTask之间存在差异 在那里实现它们看起来相同,但在第二个

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