gpt4 book ai didi

c# - 选择不在 ASP.NET Core Web API Controller 中等待异步函数运行

转载 作者:行者123 更新时间:2023-12-03 20:16:02 28 4
gpt4 key购买 nike

场景如下:

  • 后端:Asp.NET Core WebAPI 2.2
  • 前端:使用 API 的 iOS 和 Android

  • 我有一个功能,允许用户向其他用户发送消息。消息的发送是在异步操作中完成的:
    public async Task<IActionResult> CreateMessage
    此操作按顺序执行以下操作:
  • 验证
  • 等待消息持久化到 DB
  • 通过 SignalR 等待相关客户的通知
  • 不等待 通过 Azure 通知中心发送推送通知。
  • 返回 200 OK。

  • Action 的最后两行如下:
    _notificationHubProxy.SendNotification(messageToReturnResource.SenderName, messageToPush, recipientId);

    return Ok(messageToReturnResource);

    SendNotification 是异步的,但我选择不等待它以避免因等待请求完成而导致 UI 锁定。目前这一切似乎都运行良好。

    我的问题实际上如下:这是oky(即不等待),还是编写错误代码的示例,当我有很多客户端使用该应用程序时会导致问题?

    问候

    最佳答案

    fire-and-forget on ASP.NET (both Core and Classic)有几个问题:

  • 任何异常都将被静默忽略。
  • 应用程序无法检测到操作何时完成。这意味着所有比此代码“更高”的东西都不知道您的代码仍在做某事; ASP.NET、IIS 和您的负载平衡器不知道您的应用程序仍在进行中。其中一些是可以(并且将会)关闭您的应用程序的管理系统。例如,IIS 执行常规的 AppPool 回收。

  • ASP.NET 上的 Fire and Forget 用例比大多数人想象的要少得多。您不仅必须对默默地吞下错误感到满意,而且还必须对偶尔丢失该工作的情况感到满意。

    I choose to not await it to avoid UI-locks caused by the waiting of the request to finish.



    这听起来像是应该由 UI 解决方案解决的 UI 问题。

    关于c# - 选择不在 ASP.NET Core Web API Controller 中等待异步函数运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54476221/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com