D.R*_*.R. 5 asp.net-core asp.net-core-2.1
场景:我有一个带有“删除”ASP.NET Core 控制器操作的 Web 服务。该实现由两个步骤组成:第一步是便宜的,之后其他操作就不再可以看到已删除的数据,第二步是长时间运行的,执行实际的删除。
是否可以用于Task.Run第二个操作并且从不等待它并很快返回到调用者?我知道这个任务可能会由于应用程序关闭而丢失,但是是否允许Task.Run在 ASP.NET Core 中使用将工作卸载到后台并且从不等待结果任务?
我知道该任务可能会由于应用程序关闭而丢失,但是否允许使用 ASP.NET Core 中的 Task.Run 将工作卸载到后台,并且从不等待生成的任务?
哦,当然,没有什么可以阻止这一点。.NET 和 ASP.NET 允许您使用Task.Run,并且响应将立即返回给用户(假设您忽略从 返回的任务Task.Run)。
是否可以使用 Task.Run 进行第二个操作并且从不等待它并很快返回调用者?
您说您知道该任务可能会在应用程序关闭时丢失。确实如此;因此,第二次删除完全有可能永远不会发生,并且不会有错误或日志消息通知您这一事实。此外,由于该任务被忽略,因此如果该任务失败,将不会收到任何通知,因此,如果删除代码出现问题,则不会有任何日志或任何内容通知您常规失败。如果您对此表示同意,那么使用“即发即弃”就可以了。
在 ASP.NET Core 上,您甚至不需要Task.Run; 您可以只调用执行第二个删除操作的(异步)方法,然后忽略该任务而不是await执行它。
简单地忽略任务是可行的(无论有或没有Task.Run),但这确实会产生负面影响,即 ASP.NET 根本不知道卸载的工作。因此,我建议注册任务并延迟应用程序关闭,直到任务有机会完成。通过注册,仍然有可能丢失任务,但是注册可以减少丢失任务的机会。
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |