Using an Asynchronous Controller in ASP.NET MVC的使用BeginMethod / EndMethod模式部分引用了Sync()
方法。它没有链接,我无法通过谷歌搜索找到它的文档,因为同步是一个常见的术语。有人能指出我的写作方向吗?
确保您有权访问 HttpContext.Current实例和 为了避免竞争条件,你可以 通过调用恢复HttpContext.Current 来自回调方法的Sync()。
答案 0 :(得分:4)
当您通过从控制器操作中调用BeginXyz / EndXyz方法生成异步操作时,处理异步响应的线程不受ASP.NET的控制。因此,您无法从这些线程中触摸HttpContext,控制器实例或任何其他共享状态。调用Sync()方法基本上同步对请求的访问;它恢复HttpContext.Current并授予您访问触摸HttpContext,控制器等的权限,但仅限于Sync()调用的持续时间。 MVC Futures的RegisterTask()扩展方法试图使这更容易,因为你基本上将它委托给目标的Begin和End方法,而RegisterTask()帮助器将确保End线程在适当的同步上下文中执行。
如果您通过在控制器操作中调用XyzAsync / XyzCompleted方法来生成异步操作,则不必担心这一点,因为已完成的处理程序会自动在同步上下文中运行。
答案 1 :(得分:3)