在ViewComponent中:此异步方法缺少'await'运算符,将同步运行

时间:2019-05-07 13:54:04

标签: c# asp.net asp.net-core async-await asp.net-core-2.0

在ViewComponent中,我收到以下警告: (我用过ASP.NET Core 2

  

警告CS1998:此异步方法缺少“等待”运算符,将运行   同步地。考虑使用“ await”运算符等待   非阻塞API调用或“等待Task.Run(...)”以执行CPU绑定的工作   在后台线程上。

我该如何解决?

public class GenericReportViewComponent : ViewComponent
{
   public GenericReportViewComponent()
   {
   }
   public async Task<IViewComponentResult> InvokeAsync(GenericReportViewModel model)
   {
       return View(model);
   }
}

更新:

在视野中,我有@await

 <div class="container">
        @await Component.InvokeAsync("GenericReport", new GenericReportViewModel() { })
    </div>

3 个答案:

答案 0 :(得分:2)

您的动作await中没有InvokeAsync方法

您可以安全地删除async,并将返回值更改为IViewComponentResult

public IViewComponentResult Invoke(GenericReportViewModel model)
{
   return View(model);
}

答案 1 :(得分:1)

这不需要是异步的,因为您没有做任何可以从异步操作中受益的操作。删除异步和Task <>。

答案 2 :(得分:1)

您在方法中不使用任何异步调用(没有await),因此发出警告。 ViewComponent有2种方法InvokeAsyncInvoke。如果实现中没有异步调用,则应使用Invoke的同步版本(ViewComponent

public class GenericReportViewComponent : ViewComponent
{
   public IViewComponentResult Invoke(GenericReportViewModel model)
   {
       return View(model);
   }
}

这是有关同步工作的文档部分:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.2#perform-synchronous-work