在这个sample中,创建了两个线程;由BeginInvoke创建的工作线程和由SendAsync方法创建的I / O完成线程。
但在他的UnsafeQueueNativeOverlapped示例中another author,不建议这样做。
我想在asp.net页面中使用SendAsync或... Async,我想使用PageAsyncTask。 但是,它的BeginEventHandler需要返回SendAsync不返回的AsyncResult。
afaik,基于事件的异步模式是最推荐的方式,那么我们如何调用SendAsync或任何...异步方法而不创建两个线程并损害性能?
答案 0 :(得分:3)
实际上,如果你将beginIvoke和endInvoke用于委托或者ThreadPool.WorkerItem,它将不会对你的应用程序产生任何影响,因为它们使用的是asp.net使用的相同线程抛出iis 所以现在你只有2个解决方案来进行异步调用你将编写自己的线程类(但要小心) 第二次使用PageAsyncTasks(推荐)这个更安全,它的设计与asp.net完美配合
这不仅仅是关于如何以及何时使用asnyc任务而损害性能 如果你的进程真的需要很长时间才能完成(因为IIS会等到所有进程完成甚至是asnyc然后开始渲染)然后你必须转到异步解决方案而不是它会在性能上缩减
注意:
AddOnPreRenderCompleteAsync和RegisterAsyncTask之间存在差异 在那里实现它们看起来相同,但在第二个