簡體   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