![](/img/trans.png)
[英]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.