2010-03-15 69 views
5

根据我的阅读和测试,使用异步套接字,套接字本身可以使用状态对象(IAsyncResult结果)传递,如果将套接字存储为私有字段,它将被回调方法捕获。C#异步套接字问题

我想知道如何在BeginXXX和ReceiveXXX之间实现IAysnResult?在我看来,在BeginXXX调用和方法结束之后,如果没有对它的引用,状态对象将由GC处置。

在私有字段的情况下,私有字段如何在线程之间共享? (据我所知,使用默认线程池中的线程执行回调,这将被视为新线程。)

非常感谢,希望问题本身很明确。

回答

0

GC不处理对象,它释放没有引用的对象所使用的内存。客户端代码应该处理对象,GC从来不会这样做。

IAysnResult仍然在线程池中执行的委托中有一个引用,所以它不会被GC单元收集回调方法完成。

私有成员对于正在执行的线程总是可见的,所以您的私有套接字字段对于执行包含类的方法的所有线程都是可访问的。