方案如下:后端:Asp.NET 核心 WebAPI 2.2前端:使用API的iOS和Android我有一个功能,允许用户向其他用户发送消息。消息的发送是通过异步操作完成的:public async Task<IActionResult> CreateMessage此操作按顺序执行以下操作:验证等待消息对 DB 的持久性等待通过 SignalR 通知相关客户端不等待通过 Azure 通知中心发送推送通知。返回 200 OK。操作中的最后两行如下所示:_notificationHubProxy.SendNotification(messageToReturnResource.SenderName, messageToPush, recipientId);
return Ok(messageToReturnResource);SendNotification是异步的,但我选择不等待它,以避免由于请求完成而导致UI锁定。目前,所有这些似乎都很好。我的问题实际上是:这是okey(即不等待),还是这是编写错误代码的示例,当我有许多客户端使用该应用程序时会导致问题?问候
1 回答
慕森王
TA贡献1777条经验 获得超3个赞
ASP.NET(核心和经典)上的“即发即弃”存在一些问题:
任何异常都将被静默忽略。
应用程序无法检测到操作何时完成。这意味着所有“高于”此代码的东西都不知道您的代码仍在执行某些操作;ASP.NET、IIS 和负载均衡器都不知道您的应用程序仍在进行中。其中一些是可以(并且将)关闭你的应用的管理系统。例如,IIS执行定期的应用程序池回收。
Fire and Forget on ASP.NET 的用例比大多数人想象的要罕见得多。你不仅要对默默吞咽错误感到满意,而且你还必须对偶尔失去这项工作感到满意。
我选择不等待它,以避免由于等待请求完成而导致的UI锁定。
这听起来像是一个应该由UI解决方案解决的UI问题。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消