2010-03-15 6 views
5

D'après ma lecture et mes tests, avec des sockets asynchrones, le socket lui-même peut être transmis en utilisant l'objet state (résultat IAsyncResult), aussi s'il est stocké en privé, il serait capturé par les méthodes callback .C# Asynchronous Sockets questions

Je me demande comment IAysnResult est conservé entre BeginXXX et ReceiveXXX? Il me semble qu'après l'appel de BeginXXX et la fin de la méthode, l'objet d'état sera éliminé par GC s'il n'y a pas de référence.

Dans le cas d'un champ privé, comment le champ privé est-il partagé entre les threads? (Pour autant que je sache, un rappel est exécuté en utilisant un thread du pool de threads par défaut, qui serait considéré comme un nouveau thread.)

Merci beaucoup, j'espère que les questions elles-mêmes seront claires.

Répondre

0

Le GC ne dispose pas d'objets, il libère de la mémoire utilisée par des objets sans références. Le code client doit disposer des objets, GC ne le fait jamais. A toujours une référence dans un délégué exécuté dans un pool de threads, de sorte qu'il ne soit pas collecté par GC unitl une méthode de rappel se termine.

Les membres privés sont toujours visibles par le thread en cours d'exécution, de sorte que votre champ socket privé sera accessible pour tous les threads qui exécutent des méthodes de la classe conteneur.