【发布时间】:2017-06-05 11:08:43
【问题描述】:
我正在尝试在 ASP.Net Core 中加载页面时运行异步任务,即,我希望任务在用户路由到页面后立即运行,但在任务完成之前显示页面完全的。似乎使用 ASP.Net 核心,您可以使用中间件来执行此类任务。所以我尝试将以下内容添加到Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider)
{
// Other configurations here
app.Use(async (context, next) =>
{
if (context.Request.Path.Value.Contains("PageWithAsyncTask"))
{
var serviceWithAsyncTask = serviceProvider.GetService<IMyService>();
await serviceWithAsyncTask .DoAsync();
}
await next.Invoke();
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
上面的问题是在DoAsync 完成之前页面加载存在延迟,因为在DoAsync 完成之前我们不会调用next.Invoke()。如何正确实现上述操作,以便在 DoAsync 运行后立即调用 next.Invoke()?
【问题讨论】:
标签: c# asp.net asp.net-core middleware