Всегда ли мне нужно передавать свой Socket как часть параметра состояния при выполнении BeginRead? - PullRequest
1 голос
/ 02 августа 2010

В документации MSDN указано, что:

как минимум, ваш параметр состояния должен содержать подключенный сокет или сокет по умолчанию, используемый для связи.Так как вы хотите получать полученные данные в вашем методе обратного вызова, вы должны создать небольшой класс или структуру для хранения буфера чтения и любой другой полезной информации.Передайте экземпляр структуры или класса методу 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?

1 Ответ

2 голосов
/ 02 августа 2010

Если вы дотронетесь до него только во время обратного вызова или в основном изолированными способами, вы будете в безопасности.

То есть, как обычно я обрабатываю делегаты, определите переменную делегата вне области метода, чтобы использовать ее во время обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...