假设您有一个服务API调用.被调用者在某种程度上对性能至关重要,因此为了不长时间地阻止API调用,需要使用SaveAsync()方法.但是,我不能等待它,因为这会阻止API调用与非异步版本一样长(或者甚至更长).
解决方法
The reason I’m asking is this: If you don’t await the call,is there a chance the Task object returned gets garbage collected?
一般来说,不,这不应该发生.对任务进行排队的底层TaskScheduler通常会在完成之前保持对其所需生命周期的引用.您可以在TaskScheduler.QueueTask的文档中看到:
A typical implementation would store the task in an internal data structure,which would be serviced by threads that would execute those tasks at some time in the future.
您真正的问题将出现在ASP.NET SynchronizationContext上,它会在运行时跟踪任何正在进行的异步操作.如果您的控制器操作在异步操作之前完成,那么您将获得异常.
如果您希望在ASP.NET中执行“即发即忘”操作,则应确保通过HostingEnvironment.QueueBackgroundWorkItem
或BackgroundTaskManager
向ASP.NET运行时注册它们.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。