C#中task.factory.startnew传递socket参数

今天写代码的时候需要将socket作为参数传递给task.factory.startnew的处理函数,但是发现在开启的线程内无法使用传递进来的socket,想问一下是socket无法作为参数传递还是我的传参方式有问题?
传参的代码如下:

task.Factory.starnew(()=>func(socket))

因为关了电脑所以用手机只打了一行

socket只是一个int型的套接字ID,可以作为参数传递的,是否在其他线程中close了该socket。还有一点,初始化socket一般在主进程初始化阶段完成,或者在父线程完成。

task.Factory.starnew(p=>func((socket)p),socket) //请带参传递,避免闭包内直接使用,产生穿越代码

至于其他问题,上面那位已经说。因为共用对象,使用时候请主要使用try去处理,因为socket的状态是内部维持,他的状态不是“死”值,所以自己需要使用安全代码防范意外

谢谢两位大佬的解答,我找到问题所在了,我的部分源代码如下:

Task.Factory.StartNew(() => recv(clients[i]));

我原本的考虑是通过socket数组来存储多个客户端的连接,再通过循环控制每个accept的socket进入新线程进行处理,问题出在这个传递参数的i上,使用如上代码中的形式会导致参数无法传递进新线程中。改为如下形式即可:

Socket para = clients[i]
Task.Factory.StartNew(() => recv(para));

附上一个相同问题的链接http://www.skcircle.com/?id=1812