Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengelakkan Keadaan Perlumbaan Apabila Menghantar Acara dalam C#?
Keadaan Perlumbaan dalam Penghantaran Acara
Acara dalam C# selalunya dihantar menggunakan kod berikut:
public event EventHandler SomeEvent; ... { .... if(SomeEvent!=null)SomeEvent(); }
Walau bagaimanapun, dalam persekitaran berbilang benang, pendekatan ini boleh membawa kepada keadaan perlumbaan. Begini cara ia boleh berlaku:
Untuk menangani isu konkurensi ini, amalan terbaik ialah menyalin senarai invokasi kepada pembolehubah sementara sebelum menyemak nol:
protected virtual void OnSomeEvent(EventArgs args) { EventHandler ev = SomeEvent; if (ev != null) ev(this, args); }
Pendekatan ini selamat untuk benang kerana:
Dengan menyalin senarai seruan, kami memastikan bahawa pengendali acara dipanggil walaupun mereka dialih keluar selepas salinan diambil. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penyelesaian ini tidak menangani isu keadaan yang berpotensi dengan pengendali acara yang tidak berfungsi.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Keadaan Perlumbaan Apabila Menghantar Acara dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!