在ASP.Net Core的View文件中考虑以下两行:
@Component.InvokeAsync("Greeting").Result
@await Component.InvokeAsync("Greeting")
有什么区别?哪个更好,在哪种情况下?在我的代码中,他们都给出了相同的视觉效果;是否存在结果可能不同的情况?
答案 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 ,而应该等待结果,以允许代码的完整异步执行流程。