Melaksanakan mekanisme tamat masa universal dalam C#
Keperluan biasa dalam pengaturcaraan adalah untuk dapat melaksanakan kod dengan tamat masa yang ditentukan. Ini menjadi kritikal apabila berurusan dengan sistem atau kod luaran yang mungkin mengambil masa terlalu lama untuk disiapkan. Melaksanakan mekanisme tamat masa biasa membolehkan gelagat yang konsisten merentas keseluruhan pangkalan kod, memastikan kod yang tidak bertindak balas dikendalikan dengan cara yang sesuai.
Dalam kes ini, matlamatnya adalah untuk mencipta kaedah generik yang boleh melaksanakan mana-mana kod yang diberikan dalam tamat masa yang ditentukan. Penyelesaian harus menangani situasi di mana kod melebihi tamat masa dan menyediakan mekanisme untuk menghentikan pelaksanaannya.
Cara yang elegan untuk mencapai matlamat ini adalah dengan menggunakan perwakilan. Coretan kod berikut menunjukkan kaedah tamat masa generik bernama CallWithTimeout yang menerima perwakilan Tindakan dan nilai tamat masa dalam milisaat:
<code class="language-csharp">static void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; try { action(); } catch(ThreadAbortException ex){ Thread.ResetAbort();// 取消强制中止,以便更好地完成。 } }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }</code>
Dalam kaedah ini, benang berasingan dicipta untuk melaksanakan operasi yang diberikan. Kunci untuk mengawal pelaksanaan ialah menggunakan perwakilan pembalut yang menangkap rujukan kepada utas. Jika operasi melebihi tamat masa, benang ditamatkan dengan anggun dan TimeoutException dibuang.
Dengan menggunakan mekanisme tamat masa universal ini, pembangun boleh melindungi kod mereka dengan mudah daripada sistem luaran atau blok kod yang tidak bertindak balas. Ia menggalakkan tingkah laku aplikasi yang mantap dan meningkatkan pengendalian kemungkinan pengecualian.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Mekanisme Tamat Masa Generik dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!