我们有一系列的controller控制器,它们都继承自一个基本控制器(继承自ASP.NET类)。我们现在正在考虑创建一些异步操作,并且想知道如果我们只是将基本控制器更改为从AsyncController继承而不是控制器(这意味着我们所有的控制器都将从AsyncController继承),是否会遇到任何麻烦。
发布于 2011-01-06 00:10:35
杰西
在我看来,你不会有什么坏处,因为异步功能只有在你遵循以下约定时才会发挥作用:
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在上面所说的(或者在下面:-)),你可以根据需要来装饰动作,以保持意图清晰,尽管我个人认为公约应该清楚地表明这一点。
当然是值得争论的。
发布于 2012-07-12 06:19:39
MVC 4没有异步控制器-请参阅源代码:
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
发布于 2011-01-06 00:01:15
因为AsyncController已经从Controller继承了,所以这样做应该没问题。
See here for more information
该页面上的注释非常有用,可以通过继承AsyncController来确定您是否在做正确的事情,并提供了一个很好的指南来让您保持在正轨上。
https://stackoverflow.com/questions/4606111
复制相似问题