ASP.Net Core Razor组件:await vs .Result

时间:2018-06-18 12:50:50

标签: c# asp.net-mvc razor asp.net-core-mvc

在ASP.Net Core的View文件中考虑以下两行:

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

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

4 个答案:

答案 0 :(得分:3)

NB Razor Components有所不同-这是服务器端托管的Blazor ,它是.NET Core 3.0的一部分。但是,您的意思是ASP.NET Core x.x View Components

答案 1 :(得分:2)

调用.Result会导致阻止调用,可能导致您的UI出现问题。如果您正在调用异步函数,则应await它以允许应用程序的其余部分继续运行而不会被阻止。

答案 2 :(得分:2)

两个调用最有可能需要相同的时间才能返回,不同之处在于第一个调用将阻塞线程,但第二个调用将线程返回到池并允许其被另一个请求使用。基本上意味着您的服务在使用await关键字时可以每秒处理更多请求。

尽可能使用await来阻止线程阻塞。在async上做一些阅读并等待 - https://docs.microsoft.com/en-us/dotnet/csharp/async

来自MSDN - await关键字是魔术发生的地方。它会对执行await的方法的调用者产生控制权,并最终允许UI响应或服务具有弹性。

基本上await关键字将控制权交还给调用者,并将线程释放回线程池。

答案 3 :(得分:1)

在组件上调用 .Result 会让您失去等待的精髓,这是为了防止阻止您的UI,因为代码不需要等待完整执行Razor组件。

因此建议不要调用 .Result ,而应该等待结果,以允许代码的完整异步执行流程。