【问题标题】:ASP.NET asynchronous controllers and calling Sync(); what is "Sync()"?ASP.NET 异步控制器和调用 Sync();什么是“同步()”?
【发布时间】:2010-08-06 00:06:35
【问题描述】:

Using an Asynchronous Controller in ASP.NET MVC使用 BeginMethod/EndMethod 模式部分指的是Sync() 方法。它没有链接,我无法通过谷歌搜索找到关于它的文档,因为同步这个词太常见了。有人可以指出我的写作方向吗?

为了确保您可以访问 HttpContext.Current 实例和 为避免竞争条件,您可以 通过调用恢复 HttpContext.Current 来自回调方法的 Sync()。

【问题讨论】:

    标签: asp.net asp.net-mvc asynchronous httpcontext


    【解决方案1】:

    当您通过在控制器操作中调用 BeginXyz / EndXyz 方法来生成异步操作时,处理异步响应的线程不受 ASP.NET 的控制。因此,您无法从这些线程中触摸 HttpContext、控制器实例或任何其他共享状态。调用 Sync() 方法基本上是同步访问请求;它恢复 HttpContext.Current 并授予您对触摸 HttpContext、控制器等的访问权限,但仅限于 Sync() 调用期间。 MVC Futures 的 RegisterTask() 扩展方法试图使这更容易一些,因为您基本上将它委托给目标 Begin 和 End 方法,并且 RegisterTask() 帮助器将确保 End 线程在适当的同步上下文中执行。

    如果您通过在控制器操作中调用 XyzAsync / XyzCompleted 方法来生成异步操作,则不必担心这一点,因为已完成的处理程序会自动在同步上下文中运行。

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2012-02-24
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多