2010-03-15 7 views
5

비공식 소켓 읽기 및 테스트를 기반으로 소켓 자체를 상태 개체 (IAsyncResult 결과)를 사용하여 전달할 수 있으며 소켓을 개인 필드로 저장하는 경우 콜백 메서드에 의해 캡처됩니다. .C# 비동기 소켓 질문

BeginXXX와 ReceiveXXX 사이에서 IAysnResult가 어떻게 발생하는지 궁금합니다. 그것은 BeginXXX 호출과 메소드가 끝난 후 상태 객체가 참조가 없다면 GC에 의해 폐기 될 것이라고 봅니다.

개인 필드의 경우 개인 필드가 스레드간에 공유되는 방법은 무엇입니까? (알다시피, 콜백은 새 스레드로 간주 될 기본 스레드 풀의 스레드를 사용하여 실행됩니다.)

많은 질문에 대한 답변을 드리겠습니다.

답변

0

GC는 개체를 처리하지 않으므로 참조가없는 개체가 사용하는 메모리를 해제합니다. 클라이언트 코드는 객체를 처리해야하며 GC는 그렇게하지 않습니다.

IAysnResult에는 여전히 스레드 풀에서 실행되는 대리인에 대한 참조가 있으므로 콜백 메서드가 완료되면 GC 단위로 수집되지 않습니다.

private 멤버는 실행중인 스레드에서 항상 볼 수 있으므로 private 소켓 필드는 포함하는 클래스의 메서드를 실행하는 모든 스레드에서 액세스 할 수 있습니다.