Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#异步套接字问题_C#_Sockets_Asynchronous_Multithreading - Fatal编程技术网

C#异步套接字问题

C#异步套接字问题,c#,sockets,asynchronous,multithreading,C#,Sockets,Asynchronous,Multithreading,根据我的阅读和测试,对于异步套接字,可以使用state对象(IAsyncResult result)传递套接字本身,如果将套接字存储为私有字段,则回调方法将捕获它 我想知道在开始XXX和收到XXX之间的结果是如何确定的?在我看来,在BeginXXX调用和方法结束后,如果没有对状态对象的引用,则状态对象将由GC处理 对于私有字段,线程之间如何共享私有字段?(据我所知,回调是使用默认线程池中的线程执行的,该线程将被视为新线程。) 非常感谢,希望问题本身是清楚的。GC不是在处理对象,而是在释放没有引用

根据我的阅读和测试,对于异步套接字,可以使用state对象(IAsyncResult result)传递套接字本身,如果将套接字存储为私有字段,则回调方法将捕获它

我想知道在开始XXX和收到XXX之间的结果是如何确定的?在我看来,在BeginXXX调用和方法结束后,如果没有对状态对象的引用,则状态对象将由GC处理

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


非常感谢,希望问题本身是清楚的。

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

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

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