【问题标题】:ASP.Net Core Razor components: await vs .ResultASP.Net Core Razor 组件:await vs .Result
【发布时间】:2018-06-18 12:50:50
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

尽可能使用await 以防止线程阻塞。阅读 async 和 await - https://docs.microsoft.com/en-us/dotnet/csharp/async

来自 MSDN - await 关键字是魔法发生的地方。它将控制权交给执行 await 的方法的调用者,最终使 UI 具有响应性或服务具有弹性。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        在组件上调用 .Result 会让你失去 await 的本质,它的目的是防止阻塞你的 UI,因为代码不需要等待完成Razor 组件的执行。

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

        【讨论】:

          猜你喜欢
          • 2021-05-23
          • 2018-06-07
          • 2019-04-06
          • 2019-02-05
          • 2022-11-07
          • 2018-10-29
          • 2020-04-02
          • 2022-09-28
          • 2018-03-18
          相关资源
          最近更新 更多