2010-03-15 70 views
5

根據我的閱讀和測試,使用異步套接字,套接字本身可以使用狀態對象(IAsyncResult結果)傳遞,如果將套接字存儲爲私有字段,它將被回調方法捕獲。C#異步套接字問題

我想知道如何在BeginXXX和ReceiveXXX之間實現IAysnResult?在我看來,在BeginXXX調用和方法結束之後,如果沒有對它的引用,狀態對象將由GC處置。

在私有字段的情況下,私有字段如何在線程之間共享? (據我所知,使用默認線程池中的線程執行回調,這將被視爲新線程。)

非常感謝,希望問題本身很明確。

回答

0

GC不處理對象,它釋放沒有引用的對象所使用的內存。客戶端代碼應該處理對象,GC從來不會這樣做。

IAysnResult仍然在線程池中執行的委託中有一個引用,所以它不會被GC單元收集回調方法完成。

私有成員對於正在執行的線程總是可見的,所以您的私有套接字字段對於執行包含類的方法的所有線程都是可訪問的。