ASP.Net Core Razor组件:await与.Result的区别

5

考虑 ASP.Net Core 视图文件中以下两行代码:

    @Component.InvokeAsync("Greeting").Result
    @await Component.InvokeAsync("Greeting")

什么是区别?哪个更好,在哪种情况下使用?在我的代码中,它们都能给出相同的视觉效果;是否存在结果可能不同的情况?

可能是重复的问题:等待已完成的任务与使用task.Result相同吗? - rickvdbosch
4个回答

5
两个调用很可能花费同样的时间来返回结果,区别在于第一个调用会阻塞线程,而第二个调用会将线程返回到池中,并允许其他请求使用它。这意味着在使用await关键字时,您的服务可以处理更多的请求每秒。
尽可能使用await以防止线程阻塞。请阅读有关异步和等待的相关资料:https://learn.microsoft.com/en-us/dotnet/csharp/async 来自MSDN - await关键字是实现魔术的关键。它将控制权交还给执行await的方法的调用者,最终允许UI响应或服务弹性。
本质上,await关键字将控制权交还给调用方,并将线程释放回线程池。

4

调用.Result会导致阻塞调用,可能会对您的UI造成问题。如果您调用的是异步函数,应该await它,以允许您的应用程序在不被阻塞的情况下继续运行。


3
NBRazor Components 是另一种不同的东西 - 这是 .NET Core 3.0 的 服务器端托管的 Blazor 。然而,你想要的是 ASP.NET Core x.x View Components。请注意,保留 HTML 标记。

1
在组件上调用.Result会使您失去await的精髓,它应该防止UI阻塞,因为代码不需要等待Razor组件的完整执行。
因此,建议不要调用.Result,而应该await结果,以允许完整的异步执行流程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接