2010-03-15 10 views
5

Na podstawie mojego odczytu i testowania, z asynchronicznymi gniazdami, samo gniazdo może być przekazane przy użyciu obiektu stanu (wynik IAsyncResult), także jeśli przechowujesz gniazdo jako pole prywatne, byłoby przechwycone przez metody wywołania zwrotnego .C# Asynchronous Sockets questions

Zastanawiam się, jak IAysnResult jest umieszczona między BeginXXX i ReceiveXXX? Wydaje mi się, że po wywołaniu BeginXXX i metodzie stan, obiekt stanu zostanie usunięty przez GC, jeśli nie ma żadnego odniesienia do niego.

W przypadku pola prywatnego, w jaki sposób prywatne pole jest współdzielone między wątkami? (O ile mi wiadomo, wywołanie zwrotne jest wykonywane przy użyciu wątku z domyślnej puli wątków, który zostałby uznany za nowy wątek).

Wielkie dzięki, mam nadzieję, że same pytania są jasne.

Odpowiedz

0

GC nie upuszcza obiektów, zwalnia pamięć używaną przez obiekty bez odnośników. Kod klienta powinien usuwać obiekty, GC nigdy tego nie robi.

IAysnResult nadal ma odniesienie w delegacie wykonanym w puli wątków, więc nie zostanie odebrane przez GC unitl, ponieważ kończy się metoda wywołania zwrotnego.

Prywatne elementy są zawsze widoczne dla wątku wykonującego, więc twoje prywatne pole gniazda będzie dostępne dla wszystkich wątków, które wykonują metody klasy zawierającej.

Powiązane problemy