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# 在执行BeginRead时,是否始终需要将套接字作为状态参数的一部分进行传递?_C#_Sockets_Asynchronous - Fatal编程技术网

C# 在执行BeginRead时,是否始终需要将套接字作为状态参数的一部分进行传递?

C# 在执行BeginRead时,是否始终需要将套接字作为状态参数的一部分进行传递?,c#,sockets,asynchronous,C#,Sockets,Asynchronous,它在报告中指出: 至少,状态参数必须包含用于通信的已连接或默认套接字。因为您希望在回调方法中获取接收到的数据,所以应该创建一个小类或结构来保存读取缓冲区和任何其他有用的信息。通过状态参数将结构或类实例传递给BeginReceive方法 但是,我调用BeginRecieve并将实例方法作为AsyncCallback传递: class MyClass { private Socket mysocket; private void callback(IAsyncResult Resu

它在报告中指出:

至少,状态参数必须包含用于通信的已连接或默认套接字。因为您希望在回调方法中获取接收到的数据,所以应该创建一个小类或结构来保存读取缓冲区和任何其他有用的信息。通过状态参数将结构或类实例传递给BeginReceive方法

但是,我调用BeginRecieve并将实例方法作为AsyncCallback传递:

class MyClass
{
    private Socket mysocket;

    private void callback(IAsyncResult Result)
    {
        Record record = this.mysocket.EndReadRecord(Result);
        // Do things
        this.mysocket.BeginReadRecord(new AsyncCallback(callback), null);
    }

    // Other methods
}

假设
mysocket
只设置一次(在构造函数期间),是否需要将mysocket作为状态参数的一部分传递,或者使用实例字段
mysocket
是否安全?

如果您在回调期间只触摸它,或者基本上是以隔离的方式,您将是安全的

这就是我处理委托的方式,在方法范围之外定义一个委托变量,以便在回调期间使用它