【发布时间】:2012-12-07 17:39:18
【问题描述】:
我需要用复杂的长逻辑处理请求的文件丢失。
我可以在Application_Error 中执行此操作,但不确定它本身是否异步?
如果需要 5 分钟或更长时间才能工作,此处理程序是否会一直阻止其他用户?
【问题讨论】:
标签: asp.net
我需要用复杂的长逻辑处理请求的文件丢失。
我可以在Application_Error 中执行此操作,但不确定它本身是否异步?
如果需要 5 分钟或更长时间才能工作,此处理程序是否会一直阻止其他用户?
【问题讨论】:
标签: asp.net
Application_Error 是页面处理的一部分,是从您加载的页面中调用的,所以问题是页面或处理程序是否自身是异步的。
如果你不使用会话,当然如果你不使用其他同步锁,比如互斥锁,或者数据库打开/读/写
这是为什么呢?因为 session 正在锁定完整的处理,请看这个问题/答案:
call aspx page to return an image randomly slow
ASP.NET Server does not process pages asynchronously
Trying to make Web Method Asynchronous
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely
File upload and result pooling kills ASP.NET web app
所以为了简单起见,Application_Error 只是一个静态函数调用,但连接到页面或处理程序的处理。确保页面或处理程序没有相互阻塞,一切正常。
另一方面,5分钟的处理,如果你尝试将500个放在一起而不放在查询列表中,你可能会遇到其他问题。
我只是做个简单的测试,把System.Threading.Thread.Sleep(20000);放在Application_Error上,报错,继续加载其他页面,就可以了。
【讨论】: