ASP.. NET真异步操作

本文关键字:异步操作 NET ASP | 更新日期: 2023-09-27 18:10:19

我正试图从一个ASP. js . js . js . js发出几个HTTP请求。网络页面。页面本身不需要知道响应,应该继续处理。无论如何都要交付页面

我试过把HTTP代码在后台工作和异步运行,但我最初得到以下错误;

在这个上下文中不允许异步操作。页开始异步操作必须将Async属性设置为true并且异步操作只能在之前的页面上启动PreRenderComplete事件。

所以我按照我被告知的那样做了,并给页面赋予了Async属性。然后我做了一些研究,发现我的BackgroundWorker实际上并没有像我预期的那样执行异步操作。一些背景阅读(http://www.pluralsight-training.net/community/blogs/mike/archive/2005/11/04/16213.aspx)告诉我;

PreRender和PreRenderComplete事件[不]恢复,直到所有所有已注册异步任务的超时事件处理程序具有已被调用并返回。

我如何确保我的BackgroundWorker不会暂停页面的处理?

ASP.. NET真异步操作

另一个选项是ThreadPool.QueueUserWorkitem()。它将异步地启动一些东西。它还将使用asp.net线程池中的一个线程。

我通常在服务器上使用threadPool,在gui/winforms中使用BackGroundWorker。这并不是说不可能。

如果你被BackgroundWorker困住了,这至少是另一种尝试…

这里有一些其他的SO帖子:

ThreadPool。QueueUserWorkItem使用ASP。净

ThreadPool。带有lambda表达式和匿名方法的QueueUserWorkItem

ThreadPool。QueueUserWorkItem函数参数

在ASP中执行真正的异步操作的新方法。. NET是通过使用PageAsyncTask类。(MSDN文档中有一些示例代码)

同时,我推荐你阅读Thomas Marquardt的这篇文章。最有趣的部分是:

好的,所以你有一个很好的理由来异步执行一些工作,你应该怎么做呢?首先,所有你能写的代码要在请求执行期间运行,必须在模块或处理程序。没有别的选择。如果你想完成工作异步——真正的异步,就像当前线程展开时那样并且请求的执行只有在您工作时才会恢复完成后,您必须在模块或处理程序中运行异步的。如果您不想实现自己的异步模块或处理程序,您很幸运,因为ASP。NET 2.0介绍异步页面,这是一个建立在IHttpAsyncHandler之上的特性它很容易运行异步任务称为PageAsyncTasks。

他还提供了一个代码示例,如果选择不使用PageAsyncTask类,则执行异步操作。