详解ASP.NET MVC下的异步Action的定义和执行原理

2019-05-26 01:31:58于丽

  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
   public class AsyncTimeoutAttribute ActionFilterAttribute
   {
     
     public AsyncTimeoutAttribute(int duration);
     public override void OnActionExecuting(ActionExecutingContext filterContext);  
     public int Duration { get; }
   }
   
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
  public sealed class NoAsyncTimeoutAttribute AsyncTimeoutAttribute
  {
    // Methods
    public NoAsyncTimeoutAttribute() base(-1)
    {
    }
  }

从上面给出的定义我们可以看出这两个特性均是ActionFilter。AsyncTimeoutAttribute的构造函数接受一个表示超时时限(以毫秒为单位)的整数作为其参数,它通过重写OnActionExecuting方法将指定的超时时限设置给当前Controller的AsyncManager的Timeout属性进行。NoAsyncTimeoutAttribute是AsyncTimeoutAttribute的继承者,它将超时时限设置为-1,意味着它解除了对超时的限制。

从应用在这两个特性的AttributeUsageAttribute定义可看出,它们既可以应用于类也可以用于也方法,意味着我们可以将它们应用到Controller类型或者异步Action方法(仅对XxxAsync方法有效,不能应用到XxxCompleted方法上)。如果我们将它们同时应用到Controller类和Action方法上,针对方法级别的特性无疑具有更高的优先级。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。