[英]Will an instance be garbage collected if a Task's callback get reference to the instance itself?
[英]Does a running async class instance without a reference get garbage collected?
如果我在无名实例上调用async
函数,该实例会一直存活直到函数完成吗? 例如,如果我有一台需要在后台运行一段时间的服务器。 我对这台服务器的状态或以任何方式跟踪它不感兴趣。 我可能会做这样的事情:
...
new MyServer().Start();
...
class MyServer {
...
async Task Start() { ... }
...
}
Start
方法会一直运行到完成,还是会在完成运行之前将无名无引用实例进行 GC?
幕后仍然有参考。 异步方法的延续通过其Post方法注册到SynchronizationContext.Current下设置的SynchronizationContext.Current
(如果 .Current 为 null,则为线程池)。 这种延续将使引用保持活动状态。
需要注意的一件事,上面只是谈论垃圾收集器收集您的类。 如果您在 IIS 中运行,您的应用程序域可能会在您的任务完成之前关闭,这将终止服务器。 如果是这种情况,您应该使用IHostedService来保持您的服务正常运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.