ten kod, który dodaje rejestruje nowe Podprogram (y) na imprezę o nazwie jak NewMail
(klasa EventArgs nazwie NewMailEventArgs
EventHandler: Co się dzieje w tym kodzie?
// A PUBLIC add_xxx method (xxx is the event name)
// Allows methods to register interest in the event.
public void add_NewMail(EventHandler<NewMailEventArgs> value) {
// The loop and the call to CompareExchange is all just a fancy way
// of adding a delegate to the event in a thread-safe way.
EventHandler<NewMailEventArgs> prevHandler;
EventHandler<NewMailEventArgs> newMail = this.NewMail;
do {
prevHandler = newMail;
EventHandler<NewMailEventArgs> newHandler = (EventHandler<NewMailEventArgs>)Delegate.Combine(prevHandler, value);
newMail = Interlocked.CompareExchange<EventHandler<NewMailEventArgs>>(ref this.NewMail, newHandler, prevHandler);
}
while(newMail != prevHandler);
}
(źródło:. CLR za pośrednictwem C#, rozdział 11 zdarzeń) Czego nie robić rozumiem, że jest to część, najpierw przypisujemy newMail do prevHandler, następnie newMail jest zmieniany (w CompareExchange) na newHandler ?, a następnie sprawdzamy, czy newMail! = prevHandler?
Jestem naprawdę trochę zmieszany. Czy ktoś może mi pomóc zrozumieć, co to jest dokładnie dzieje się tutaj, szczególnie w pętli "do"?