我正在尝试从 ASP.NET 页面发出多个 HTTP 请求。页面本身不需要知道响应,并且应该继续处理并交付页面。
我尝试将 HTTP 代码放入 BackgroundWorker 中并异步运行它,但是我最初收到以下错误;
在此上下文中不允许异步操作。页面起始
异步操作必须将 Async 属性设置为 true
并且异步操作只能在之前的页面上启动
PreRenderComplete 事件。
所以我按照别人的指示做了,并给页面赋予了异步属性。然后我做了一些研究,发现我的BackgroundWorker 实际上并没有像我预期的那样执行异步操作。一些背景阅读(http://www.pluralsight-training.net/community/blogs/mike/archive/2005/11/04/16213.aspx http://www.pluralsight-training.net/community/blogs/mike/archive/2005/11/04/16213.aspx) 告诉我;
PreRender 和 PreRenderComplete 事件 [do] 不会恢复,直到所有
所有已注册异步任务的超时事件处理程序都有
被调用并返回。
如何确保我的BackgroundWorker 不会暂停页面的处理?
另一个值得关注的选项是 ThreadPool.QueueUserWorkitem()。它会异步触发一些东西。它还将使用 asp.net 线程池中的线程。
我通常在服务器上使用 threadPool,在 gui/winforms 中使用 BackGroundWorker。这并不是说它不能完成。
如果你被 BackgroundWorker 困住了,那至少还有其他可以尝试的事情......
这是其他一些 SO 帖子:
ThreadPool.QueueUserWorkItem 使用 ASP.Net https://stackoverflow.com/questions/6962877/threadpool-queueuserworkitem-uses-asp-net
具有 lambda 表达式和匿名方法的 ThreadPool.QueueUserWorkItem https://stackoverflow.com/questions/738139/threadpool-queueuserworkitem-with-a-lambda-expression-and-anonymous-method
带有函数参数的 ThreadPool.QueueUserWorkItem https://stackoverflow.com/questions/5564737/threadpool-queueuserworkitem-with-function-argument
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)