Dans ViewComponent, j'ai reçu cet avertissement:
(J'ai utilisé ASP.NET Core 2 )
avertissement CS1998: Cette méthode asynchrone ne dispose pas d'opérateurs 'await' et s'exécutera de manière synchrone. Pensez à utiliser l'opérateur 'await' pour attendre les appels d'API non bloquants, ou 'wait Task.Run (...)' pour effectuer un travail lié au processeur sur un fil d'arrière-plan.
Comment puis-je le résoudre?
<div class="container">
@await Component.InvokeAsync("GenericReport", new GenericReportViewModel() { })
</div>
Mise à jour:
en vue, j'ai @await:
public class GenericReportViewComponent : ViewComponent
{
public GenericReportViewComponent()
{
}
public async Task<IViewComponentResult> InvokeAsync(GenericReportViewModel model)
{
return View(model);
}
}
3 Réponses :
Cela n'a pas besoin d'être asynchrone car vous ne faites rien qui bénéficierait d'une opération asynchrone. Supprimez l'async et la tâche <>.
Vous n'utilisez aucun appel asynchrone dans la méthode (il n'y a pas de wait ), d'où l'avertissement. ViewComponent a 2 méthodes InvokeAsync et Invoke . Vous devez utiliser la version synchrone ( Invoke ) du ViewComponent lorsqu'il n'y a pas d'appels asynchrones dans l'implémentation:
public class GenericReportViewComponent : ViewComponent
{
public IViewComponentResult Invoke(GenericReportViewModel model)
{
return View(model);
}
}
Voici la documentation section sur le travail synchrone: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2#perform-synchronous-work
Vous ne savez pas pourquoi cela a été rejeté, peut-être parce que ce n'est qu'un vidage de code sans aucune explication?
Vous n'avez aucune méthode wait dans votre action InvokeAsync
Vous pouvez supprimer en toute sécurité async et changer le retour en IViewComponentResult
public IViewComponentResult Invoke(GenericReportViewModel model)
{
return View(model);
}
Supprimez
asyncde la définition de méthode.Quelle partie du message d'erreur n'est pas claire pour vous? Supprimez async lorsque vous ne faites pas async et utilisez await dans la méthode lorsque vous le faites
InvokeAsyncn'a en effet aucune opération asynchrone. Soit vous ne feriez plus la méthodeasynchrone, soit vousattendezune opération dans la méthode.D'après ce que vous avez publié, votre méthode
InvokeAsyncne fait rien d'asynchrone. Vous pouvez supprimer en toute sécuritéasyncet renvoyerIViewComponentResult.Mise à jour: en vue, j'ai @await: ... mais vous n'avez pas d'attente dans le corps
InvokeAsync@Selvin: Cela signifie que je n'ai pas besoin d'utiliser async?
1. comme l'a écrit Tseng ... l'avertissement est explicite 2. vous avez déjà répondu
pourquoi voudriez-vous qu'il appelle avec wait? votre méthode contient-elle une méthode attendue à l'intérieur?