Zdarzenia odporne na wątki

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *