Это указывает в документации 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
?
Если вы будете касаться его только во время обратного звонка или в основном изолированно, вы будете в безопасности.
Обычно я так и работаю с делегатами: определяю переменную делегата вне области видимости метода, чтобы использовать ее во время обратного вызова.