谁能解释为什么 Razor 调用 InvokeAsync 但 class 实现 Invoke

Can anyone explain why the Razor calls InvokeAsync but the class implements Invoke

我正在熟悉别人的代码,她在 Index.cshtml:

        @if (Model.Type == Group)
        {
            @await Component.InvokeAsync("GroupMessage")
        }

这在 ViewComponent 中 class

public class GroupMessageViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        return View();
    }
}

所以在标记中,有一个 InvokeAsync 但 class 只实现了 Invoke。她不在公司了,所以我不能问她设计背后的原因(我可能是在表现我对synchronous/asynchronous的无知!)

谢谢。

你没有在方法中使用任何异步调用,没有awaitViewComponent 有两种方法 InvokeAsyncInvoke.

所以你的GroupMessageViewComponent只能使用同步方式InVoke,否则会得到警告:

warning CS1998: This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

你可以看到这个

您可以在这里查看组件同步方法:Perform synchronous work