2010-05-29 85 views
2

这个sample,创建了两个线程;由BeginInvoke创建的工作线程和由SendAsync方法创建的I/O完成线程。asp.net中的异步调用

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

我想使用SendAsync或...在asp.net页面中的异步,我想使用PageAsyncTask。但是,其BeginEventHandler需要返回哪个SendAsync不返回的AsyncResult。

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

回答

3

实际上,如果你使用beginIvoke和endInvoke代表或ThreadPool.WorkerItem它不会在你的应用程序有任何区别,因为它们使用的是asp.net使用的同一个线程抛出iis 所以现在你只有2个解决方案使异步调用第一个U将写你自己的线程类(但要小心) 第二次使用PageAsyncTasks(推荐)这一个更加安全,它的设计与asp.net完美地工作

它不是关于损害的表现就像它关于如何以及何时使用asnyc任务 如果你的过程真的需要很多时间才会完成(因为IIS将等待所有过程完成,即使是asnyc任务n启动渲染),那么你必须去异步的解决方案,而不是它将使平局早在性能

注:

有在那里执行AddOnPreRenderCompleteAsync和RegisterAsyncTask 之间的差异,他们看起来是一样的,但在第二个

  1. 您可以访问当前HTTP 情况下,模拟,文化和 配置文件数据等
  2. 可以并行
  3. 运行多个任务,你有超时事件,您可以 确定在页面超时 属性
  4. 你可以叫RegisterAsyncTask 几次在一个请求 注册多个异步操作