2
當對類的所有引用都被刪除時異步方法會發生什麼?對象最終是否比它應該生存的時間更長(直到異步方法完成)?或者異步方法會被取消嗎?我問,因爲我沒有編譯器來測試。當所有對象引用被刪除時異步方法會發生什麼?
當對類的所有引用都被刪除時異步方法會發生什麼?對象最終是否比它應該生存的時間更長(直到異步方法完成)?或者異步方法會被取消嗎?我問,因爲我沒有編譯器來測試。當所有對象引用被刪除時異步方法會發生什麼?
啓動異步方法的對象的實例將保持活動狀態,直到操作完成。直到某個線程包含對其的引用時,纔會有資格進行垃圾收集。異步API在線程池中的線程上保留對該對象的引用,並且在操作結束之前它不會被垃圾收集。異步方法不會被垃圾收集器取消。
你有什麼消息來證實這一點。似乎異步模式不需要該對象在周圍。你調用BeginOpertion並獲得一個AsyncResult。看起來AsyncResult是線程池線程上保存的內容,但並不要求該對象保持原樣,因爲從AsyncResult對象獲得實際結果,您可以在原始對象上調用EndRequest,即您提供此對象並在那裏沒有必要在內部保留它。 – Stilgar 2011-05-08 16:08:30
@Stilgar,AsyncResult有一個[AsyncDelegate](http://msdn.microsoft.com/en-us/library/system.runtime.remoting.messaging.asyncresult.asyncdelegate.aspx)屬性,它本身有一個'Target'保留原始參考文獻的財產。 – 2011-05-08 16:12:01