Может ли кто-нибудь сказать мне, может ли я столкнуться с непреднамеренным поведением, если я использую анонимные методы с Async I/O?Анонимные методы и Async I/O
В качестве примера:
Action<Socket> acceptedHandler = DoAccept
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += ((sender, ea) => acceptedHandler(ea.AcceptSocket));
// Server is a Socket
if (!Server.AcceptAsync(e))
acceptedHandler(e);
То же самое относится и к BeginXXX/EndXXX асинхронным I/O.
Разве это не захват принятого делегата Хэндлера? –
Действительно ... Я думал больше о том, когда вы ссылаетесь на переменные, которые имеют изменяемые объекты, такие как списки и т. Д. Если позже вы измените значение принятогоHandler, а четное будет уволено, вы вызовете то, на что оно ссылается в этот момент, а не оригинальный DoAccept. – jvilalta
Хорошо, так в этом примере не изменен SocketAsyncEventArgs? Тем более, что его можно повторно использовать, и вы можете иметь несколько ожидающих решений Accepts? –