繁体   English   中英

没有引用的正在运行的异步类实例是否会被垃圾收集?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM