任何人都可以告訴我,如果我可能會遇到意外的行爲,如果我使用匿名方法與異步I/O?匿名方法和異步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。
是不是捕獲acceptedHandler委託? – 2009-12-23 04:59:11
確實......我在考慮更多關於何時引用具有可變對象(如列表等)的變量。如果您稍後更改acceptedHandler的值並且解除了偶數,那麼您將在此處調用它指向的任何內容,而不是原始的DoAccept。 – jvilalta 2009-12-23 16:05:37
好的,在這個例子中,不是SocketAsyncEventArgs可變嗎?特別是因爲它可以重複使用,並且可以有多個Accepts pending? – 2009-12-23 20:22:06