【问题标题】:What is the difference between regular and Async methods (OnGet vs OnGetAsync)常规方法和异步方法有什么区别(OnGet vs OnGetAsync)
【发布时间】:2019-03-24 13:04:47
【问题描述】:

我开始学习 Razor 页面的工作原理,教程中提到了 OnGet 和 OnPost,还提到我们也有异步选项:OnGetAsync 和 OnPostAsync。但是他们没有提到它们是如何工作的,显然它们是异步的,但是如何呢?他们使用 AJAX 吗?

public void OnGet()
{
}


public async Task OnGetAsync()
{
}

【问题讨论】:

  • 这与AJAX无关。就异步而言,这意味着此类方法(处理程序)可以使用 C# 5+ 中的async/await 模式。尽管它指的是旧版本的 ASP.NET MVC,但 this article 可能有助于解释在此处使用 async/await 的好处。

标签: asp.net-core razor-pages


【解决方案1】:

OnGetOnGetAsync 之间没有实际区别。 OnGetAsync 只是包含异步代码的方法的命名约定,在发出 GET 请求时应执行这些代码。您可以省略 Async 后缀,但仍使方法异步:

public async Task OnGet()
{
    ...
    await ....
    ...
}

异步方法是在它们执行时释放它们的线程以便它可以用于其他事情直到执行结果可用的方法。您可以在此处阅读有关异步方法如何工作的更多信息:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/#BKMK_WhatHappensUnderstandinganAsyncMethod

您不能在同一个 Razor 页面中拥有 Onget OnGetAsync 处理程序。框架认为它们是相同的。

【讨论】:

  • 我是 Razor 页面的新手,这有点令人困惑。通常每个连接都应该由 IIS 在一个单独的线程中提供服务,所以就像我从你所说的那样理解 OnGet 和 OnGetAsync 实际上以相同的方式在一个单独的线程中异步运行。我看到许多示例调用异步函数并等待它完成,基本上阻塞了调用线程。他们为什么这样做?没有像通常的 Windows 桌面应用程序那样处理的消息队列,为什么他们要再次创建一个新线程并不必要地消耗系统资源?即使在 MS 样品中也可以使用它
  • @Mike:使用 OnGetAsync 优于 OnGet 有什么优势吗?例如,如果我的剃须刀页面只有一种方法,即 OnGet 来显示数据而没有其他操作。在这种情况下,最好调用哪一个
  • -async 对于使用任务或数据库调用的人来说是有意义的,它来自一个旋转 IO 调用的剃须刀页面
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
相关资源
最近更新 更多