【问题标题】:Is this C# await superfluous?这个 C# await 是多余的吗?
【发布时间】:2015-06-05 02:04:30
【问题描述】:

我在一定程度上理解线程,但在实践中我没有什么经验。在查看我正在维护的这段代码时,AWAIT 似乎没有任何好处。对此方法的所有调用都是通过 AJAX 进行的,并且仅在用户单击导出链接时发生。由于该方法没有其他任何作用,我看不到 AWAIT 有任何优势,而是想象它实际上引入了一些开销。我也相信所有其他点击导出的用户都会将这个方法作为他们自己的线程输入,对吧?因此,这可能仅在单个用户快速多次单击导出时才有用?谢谢。

[PreventLogging]
    [HttpPost]
    public async Task<JsonResult> GetActivityReportCallsAsync([DataSourceRequest] DataSourceRequest request)
    {
        try
        {
            var result = await GetAllCallsAsync();
            return Json(result.ToDataSourceResult(request));
        }
        catch (Exception exc)
        {
            return JsonShowMessage(false, ServerMessageType.Error, exc.Message);
        }
    }

【问题讨论】:

  • 您还期望如何获得结果
  • @HansPassant:虽然是这样,但 OP 只承认对线程的了解很少。鉴于这种情况,也许还有一点解释......
  • 另一种方法是显式获取更笨重的任务的值。然而,await/async 提供了一个巨大的好处,它被实现为一个延续,这意味着你的线程实际上在异步调用执行时被释放了。
  • 您可以继续编写相同的代码,而无需await 如果您发现代码同样易于使用,那么您可能会认为这里是多余的。如果您发现在没有await 的情况下尝试完成这项工作还有很多工作量,那么这并不是多余的。

标签: c# ajax multithreading async-await


【解决方案1】:

AWAIT 似乎没有任何好处

您可能想看看我的async on ASP.NET MSDN article。在其中,我列举了一些关于 async 会或不会为您的请求做什么的常见误解。

总之,ASP.NET 上的async/await 是为了可扩展性,并假设您已经有一个可扩展的后端。它不会使任何个人请求运行得更快,或者更早返回,或类似的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2013-11-21
    • 2016-08-27
    相关资源
    最近更新 更多