【问题标题】:Do I always need to pass my Socket as part of the state parameter when doing BeginRead?在执行 BeginRead 时,我是否总是需要将我的 Socket 作为状态参数的一部分传递?
【发布时间】:2010-08-02 09:12:57
【问题描述】:

它在MSDN documentation 中声明:

至少,您的状态参数必须包含用于通信的已连接或默认 Socket。由于您希望在回调方法中获取接收到的数据,因此您应该创建一个小类或结构来保存读取缓冲区以及任何其他有用的信息。通过 state 参数将结构体或类实例传递给 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 是否安全?

【问题讨论】:

    标签: c# sockets asynchronous


    【解决方案1】:

    如果你只在回调期间触摸它,或者基本上以孤立的方式触摸它,你会很安全。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2013-10-30
      • 2013-08-09
      • 2019-12-24
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      相关资源
      最近更新 更多