2012-06-28 136 views
0

我有我的服務下面的代碼:終身異步委託調用的

protected override void OnStart(string[] args) 
{ 
    var cleaner = new Cleaner(); 
    Action action = cleaner.Run; 
    action.BeginInvoke(null, null); 
} 

我很擔心,我是否應該委託移動到一個實例變量,因爲它使用可能被GC收集的對象,因爲他們只在本地創建。

+0

您是否嘗試調用[GC.Collect()](http://msdn.microsoft.com/zh-cn/library/xe0c2357.aspx)以查看會發生什麼? –

回答

0

如果收集到仍在使用中的物體,會發生什麼情況?對這個問題沒有理智的答案。因此,CLR保證沒有被引用的對象將被垃圾收集。無論您如何編寫代碼,您都是安全的。

如果仍然引用對象,您甚至無法獲取對象。即使你想。

+0

不能'action'本身收集? – Grozz

+0

它可以,如果沒有人(例如調用的BeginInvoke後,甚至期間)使用它。你懷疑這會導致問題嗎?它不能/不應該。 – usr

+0

所以'action'被收集,然後'cleaner'被收集。因此,仍在運行'cleaner.Run'函數的線程會留下無效數據。 – Grozz