Thread.Sleep(): Mengapa Ia Selalunya Idea Buruk
Thread.Sleep()
ialah kaedah biasa dalam pengaturcaraan, tetapi ia sering dikritik kerana kelemahannya. Artikel ini menerangkan sebab ia bermasalah dan mencadangkan alternatif yang lebih baik.
Kelemahan Thread.Sleep()
Thread.Sleep()
mengalami beberapa isu utama:
Thread.Sleep(n)
tidak menjamin jeda n-milisaat yang tepat. Kelewatan sebenar boleh menjadi lebih lama disebabkan penjadualan urutan sistem pengendalian.Thread.Sleep()
tidak semestinya mengikat sumber ini.Alternatif yang Lebih Baik: Menggunakan WaitHandles
Untuk menunggu tak segerak, WaitHandles
ialah pilihan yang unggul. Mereka membenarkan urutan menunggu acara atau isyarat tertentu tanpa menyekat aplikasi sepenuhnya.
Contoh Ilustrasi:
Mari kita lihat contoh yang cacat menggunakan Thread.Sleep()
untuk pengundian:
<code class="language-csharp">while (true) { doSomework(); Thread.Sleep(5000); }</code>
Penyelesaian yang lebih cekap menggunakan WaitHandle
:
<code class="language-csharp">AutoResetEvent waitHandle = new AutoResetEvent(false); while (true) { doSomework(); waitHandle.WaitOne(5000); }</code>
Bila Thread.Sleep()
Mungkin Boleh Diterima
Terdapat situasi terhad di mana Thread.Sleep()
mungkin sesuai:
Pengambilan Utama
Walaupun Thread.Sleep()
nampak ringkas, ketidakcekapan sumber, pemasaan yang tidak tepat dan gelagat menyekat menjadikannya tidak sesuai untuk kebanyakan tugas pengaturcaraan tak segerak. WaitHandles
menyediakan pendekatan yang lebih mantap dan cekap untuk mengurus penyegerakan benang dalam aplikasi berbilang benang.
Atas ialah kandungan terperinci Mengapa anda harus mengelakkan thread.sleep () dalam kod anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!