J'essaie d'exécuter une tâche asynchrone lors du chargement d'une page en ASP.Net Core, c'est-à-dire que je veux que la tâche s'exécute dès que l'utilisateur se dirige vers la page mais que la page s'affiche avant que la tâche ne soit terminée. Il semble qu'avec ASP.Net Core, vous utilisez un intergiciel pour exécuter de telles tâches. J'ai donc essayé d'ajouter ce qui suit à 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?}");
});
}
Le problème avec ce qui précède est qu'il y a un retard dans le chargement de la page jusqu'à ce que DoAsync
est complet puisque nous n'appelons pas next.Invoke()
jusqu'à DoAsync
est complet. Comment puis-je mettre en œuvre correctement ce qui précède de sorte que next.Invoke()
est appelé immédiatement après que j'ai DoAsync
en train de courir ?