首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ASP.NET AsyncController而不是AsyncController有什么问题吗?

使用ASP.NET AsyncController而不是AsyncController有什么问题吗?
EN

Stack Overflow用户
提问于 2011-01-05 23:56:24
回答 5查看 1.7K关注 0票数 4

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-06 00:10:35

杰西

在我看来,你不会有什么坏处,因为异步功能只有在你遵循以下约定时才会发挥作用:

代码语言:javascript
复制
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
        });
    }
}

约定是在命名中添加News*Async*和News*Completed*部分。

请参见:

async controllers in asp.net mvc 2

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

如果您不更改继承的控制器代码中的任何内容,则不会启动任何异步活动。然而,正如Robert在上面所说的(或者在下面:-)),你可以根据需要来装饰动作,以保持意图清晰,尽管我个人认为公约应该清楚地表明这一点。

当然是值得争论的。

票数 6
EN

Stack Overflow用户

发布于 2012-07-12 06:19:39

MVC 4没有异步控制器-请参阅源代码:

代码语言:javascript
复制
    namespace System.Web.Mvc
{
    // Controller now supports asynchronous operations.
    // This class only exists 
    // a) for backwards compat for callers that derive from it,
    // b) ActionMethodSelector can detect it to bind to ActionAsync/ActionCompleted patterns. 
    public abstract class AsyncController : Controller
    {
    }
}

请参阅我的教程Using Asynchronous Methods in ASP.NET MVC 4

票数 2
EN

Stack Overflow用户

发布于 2011-01-06 00:01:15

因为AsyncController已经从Controller继承了,所以这样做应该没问题。

See here for more information

该页面上的注释非常有用,可以通过继承AsyncController来确定您是否在做正确的事情,并提供了一个很好的指南来让您保持在正轨上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4606111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档