C# 异步套接字问题

5

根据我的阅读和测试,使用异步套接字时,套接字本身可以使用状态对象(IAsyncResult result)进行传递,同时如果将套接字存储为私有字段,则会被回调方法捕获。

我想知道IAysnResult在BeginXXX和ReceiveXXX之间是如何保持的?在我看来,在BeginXXX调用后并且方法结束后,如果没有对它的引用,状态对象将被GC释放。

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

非常感谢,希望问题本身清楚明了。

1个回答

0

GC不会处理对象的释放,而是释放没有引用的对象占用的内存。客户端代码应该处理对象的释放,GC不会这样做。

IAysnResult在一个线程池中执行的委托中仍然有引用,因此它只有在回调方法完成后才能被GC收集。

私有成员对于执行线程始终可见,因此您的私有套接字字段将对执行包含类的方法的所有线程都是可访问的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接