ASP.NET中的异步RouteBase与GetRouteDataAsync和GetVirtualPathAsync?

Dir*_*oer 10 c# asp.net asp.net-mvc url-routing async-await

我有一个自定义ASP.NET路由,其中​​包含IO操作.现在,假设这些IO操作无法缓存(即太大).

在某种程度上,我正在寻找一个AsyncRouteBase

public async override Task<RouteData> GetRouteDataAsync(HttpContextBase httpContext)
public async override Task<VirtualPathData> GetVirtualPathAsync(RequestContext requestContext, RouteValueDictionary routeValues);
Run Code Online (Sandbox Code Playgroud)
  • 类似的东西已经存在吗?(找不到)
  • ASP.NET管道中是否有我可以自己创建的地方?

我正在使用ASP.NET MVC 5.2.3.0

Ami*_*rzi 0

不幸的是,没有办法async用一个方法覆盖一个非方法async。我认为你最好的选择是使用一种asyncoverride方法并从非方法中调用该方法,async例如:

public override RouteData GetRouteData(HttpContextBase httpContext) {
    return GetRouteDataAsync(httpContext);
    //return await GetRouteDataAsync(httpContext);
}

public async override Task<RouteData> GetRouteDataAsync(HttpContextBase httpContext){
    //operations here
}
Run Code Online (Sandbox Code Playgroud)

注意:但这可能会导致问题。如果原始代码不希望async执行任何代码,则引入此模式可能会打破预期。如果可能的话避免它。

作为建议,请参阅使用任务简化异步编程