Я должен всегда передавать свой Сокет как часть параметра состояния при выполнении BeginRead?

Это указывает в документации 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
задан Justin 2 August 2010 в 09:14
поделиться

1 ответ

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

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

2
ответ дан 2 September 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: