场景:我有一个带有“删除”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
ing it.
简单地忽略任务就可以了(有或没有Task.Run
),但这确实有负面影响,即 ASP.NET 不知道卸载的工作at all。所以我会推荐注册任务并延迟应用程序关闭,直到任务有机会完成。通过注册,仍然有可能丢失任务,但是注册可以减少丢失任务的机会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)