ASP.NET应用程序中的异步调用
我不是在谈论异步页面或异步处理程序,我只是想知道在调用异步方法时是否应该担心任何副作用,该方法将在页面渲染完成后结束 给出的示例:每次用户登录时,我都必须启动一个繁重且耗时的SQL操作,但用户不需要知道该操作的结果,因此我可以使用ASP.NET应用程序中的异步调用,asp.net,multithreading,iis,asynchronous,Asp.net,Multithreading,Iis,Asynchronous,我不是在谈论异步页面或异步处理程序,我只是想知道在调用异步方法时是否应该担心任何副作用,该方法将在页面渲染完成后结束 给出的示例:每次用户登录时,我都必须启动一个繁重且耗时的SQL操作,但用户不需要知道该操作的结果,因此我可以使用beginexecutenquery执行查询,而无需通过任何回调,并完成页面呈现 我关心的是,如果HTTP调用结束(因为页面被服务),并且我异步执行的任何东西已经在运行,会发生什么?ASP.NET或IIS是否将剪切、销毁或作废任何内容 干杯。如果注册了回调,进程将返回以
beginexecutenquery
执行查询,而无需通过任何回调,并完成页面呈现
我关心的是,如果HTTP调用结束(因为页面被服务),并且我异步执行的任何东西已经在运行,会发生什么?ASP.NET或IIS是否将剪切、销毁或作废任何内容
干杯。如果注册了回调,进程将返回以通知回调,否则仍将完成作业。AFAIK-ASP.NET或IIS都不会剪切/销毁或作废任何内容,因为执行已经命令,并且必须完成。即使请求完成,该操作也将运行。但是,请注意,ASP.NET主机会主动杀死线程。当IIS有任何理由卸载或回收AppDomain时,您的后台线程将被终止。卸载发生在几种情况下。例如,在一段时间内没有收到新的请求。或者在某个时间段内从应用程序中触发太多异常。或者当内存压力过高时 如果你需要保证手术会完成,我想你可以做三件事:
恐怕这是不对的。当IIS决定回收AppDomain时,它将等待所有请求完成,然后直接卸载AppDomain,这意味着所有后台线程都将被终止。我不确定您是否理解我的评论。正如你所说,IIS会等待所有请求完成,我也这么说。除非AppDomain异常卸载,否则将执行请求