2010-03-15 24 views
5

In base alla lettura e al test, con socket asincroni, il socket stesso può essere passato utilizzando oggetto stato (risultato IAsyncResult), anche se memorizza il socket come campo privato, verrà catturato dai metodi di callback .C# domande socket asincroni

Mi chiedo in che modo IAysnResult viene utilizzato tra BeginXXX e ReceiveXXX? Mi sembra che dopo la chiamata BeginXXX e il metodo finisca, l'oggetto stato sarebbe smaltito da GC se non vi è alcun riferimento ad esso.

Nel caso del campo privato, come viene condiviso il campo privato tra i thread? (Per quanto ne so, un callback viene eseguito utilizzando un thread dal pool di thread predefinito, che sarebbe considerato come una nuova discussione.)

Molte grazie, speriamo che le domande siano chiare.

risposta

0

GC non sta eliminando oggetti, ma sta liberando memoria utilizzata da oggetti senza riferimenti. Il codice client deve disporre di oggetti, GC non lo fa mai.

IAysnResult ha ancora un riferimento in un delegato eseguito in un pool di thread, quindi non può essere raccolto da GC unitl termina un metodo di callback.

I membri privati ​​sono sempre visibili per il thread in esecuzione, quindi il campo del socket privato sarà accessibile per tutti i thread che eseguono i metodi della classe contenente.