Dalam pembangunan perisian, beberapa operasi mungkin perlu dicuba beberapa kali untuk berjaya diselesaikan. Kaedah tradisional biasanya menggunakan kitaran
dengan masa semula yang jelas, seperti kod berikut:
while
<code class="language-csharp">int retries = 3; while (true) { try { DoSomething(); break; // 成功! } catch { if (--retries == 0) throw; else Thread.Sleep(1000); } }</code>
memperkenalkan
kelas
Retry
Matlamatnya adalah untuk membuat kelas yang boleh digunakan semula, yang menerima komisen sebagai parameter dan melakukan operasi di blok Re -test. Kod berikut menyediakan pelaksanaan yang mungkin:
Retry
Gunakan
<code class="language-csharp">public static class Retry { public static void Do(Action action, TimeSpan retryInterval, int maxAttemptCount = 3) { Do(() => { action(); return null; }, retryInterval, maxAttemptCount); } public static T Do<T>(Func<T> action, TimeSpan retryInterval, int maxAttemptCount = 3) { var exceptions = new List<Exception>(); for (int attempted = 0; attempted < maxAttemptCount; attempted++) { try { return action(); } catch (Exception ex) { exceptions.Add(ex); if (attempted < maxAttemptCount -1) { Thread.Sleep(retryInterval); } } } throw new AggregateException(exceptions); } }</code>
Kaedah ini boleh digunakan dalam pelbagai cara untuk mencapai logik semula: Retry
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan logik semula dengan elegan di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!