始终使用ASP.NET MVC AsyncController而不是Controller的任何问题?

Bee*_*eep 4 asp.net-mvc

我们有一系列ASP.NET MVC控制器,它们都继承自单个基本控制器(继承自Controller类).我们现在正在考虑创建一些异步操作,并且想知道如果我们只是将基本控制器更改为继承AsyncController而不是Controller(意味着我们所有的控制器都将从AsyncController继承),我们是否会遇到任何麻烦.

jim*_*lan 6

杰斯,

在我看来,当你遵循以下约定时,asynch功能只会被调用,所以你不会受到伤害:

public class PortalController : AsyncController
{
    public void NewsAsync(string city)
    {

        AsyncManager.OutstandingOperations.Increment();
        NewsService newsService = new NewsService();
        newsService.GetHeadlinesCompleted += (sender, e) =>
        {
            AsyncManager.Parameters["headlines"] = e.Value;
            AsyncManager.OutstandingOperations.Decrement();
        };
        newsService.GetHeadlinesAsync(city);
    }

    public ActionResult NewsCompleted(string[] headlines)
    {
        return View("News", new ViewStringModel
        {
            NewsHeadlines = headlines
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

惯例是在命名中添加News*Async*和News*Completed*部分.

看到:

asp.net mvc 2中的异步控制器

观察控制器类现在派生自AsyncController而不是Controller.此外,新闻动作方法已被拆分为名为NewsAsync和NewsCompleted的方法,这些方法与异步页面中的Begin和End方法类似.逻辑上,控制器仍然公开名为News的单个操作方法.但在物理上,方法实现已经使用整个.NET框架中使用的异步模式的变体进行了分解.

如果您未在继承的控制器代码中更改任何内容,则不会启动异步激活.然而,正如罗伯特上述(或低于也许:-)),你可以装饰一个需要必须的基础上采取的行动,以保持意图明显,寿",我个人认为,公约应表明了明确.

当然值得辩论.

  • 惯例+1.这应该工作正常. (3认同)