Jak wywołujecie zdarzenia w C#? Nie można zapomnieć na pewno o sprawdzeniu, czy zdarzenie jest subskrybowane:
if (Event != null)
Event();
No i wszystko fajnie… Ale co jak jakiś przebiegły wątek wejdzie nam pomiędzy wódkę, a zakąskę i się wypisze?
A no buba będzie 🙂 Cała powyższa operacja jak widać nie jest atomowa.
Nasuwa się pytanie – Czy można jakoś temu zaradzić?
A no można!
var handler = Event;
if (handler!=null)
handler();
handler’a nikt inny nie zna i z niego się nikt przypadkiem nie wypisze 🙂
Na szczęście w C# 6.0 rozwiązano tą nieszczęśliwą sytuację nowym operatorem ?.
Event?.Invoke();
Teraz operacja jest atomowa. Sprytnie, nie?
Następnym razem postaram się napisać więcej o nowościach w C# 6.0.