加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 你必须等待异步方法吗?

发布时间:2020-12-15 08:14:14 所属栏目:百科 来源:网络整理
导读:假设您有一个服务API调用.被调用者在某种程度上对性能至关重要,因此为了不长时间地阻止API调用,需要使用SaveAsync()方法.但是,我不能等待它,因为这会阻止API调用与非异步版本一样长(或者甚至更长). 我问的原因是:如果你没有等待调用,返回的Task对象是否有可
假设您有一个服务API调用.被调用者在某种程度上对性能至关重要,因此为了不长时间地阻止API调用,需要使用SaveAsync()方法.但是,我不能等待它,因为这会阻止API调用与非异步版本一样长(或者甚至更长).

我问的原因是:如果你没有等待调用,返回的Task对象是否有可能被垃圾回收?如果是这样,会中断正在运行的任务吗?

解决方法

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.QueueBackgroundWorkItemBackgroundTaskManager向ASP.NET运行时注册它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读