Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memastikan Pelaksanaan Tunggal Kaedah Permulaan Tak Segerak dalam C#?
Pelaksanaan Tunggal Kaedah Permulaan Tak Segerak dalam C#
Dalam pembangunan C#, memastikan kaedah permulaan tak segerak dilaksanakan sekali sahaja adalah kritikal. Ini menghalang keadaan perlumbaan di mana beberapa utas serentak mencuba pemula yang sama, yang membawa kepada kemungkinan ralat. Walaupun SemaphoreSlim
menyediakan penyelesaian, AsyncLazy<T>
daripada pakej Microsoft.Extensions.Primitives
menawarkan pendekatan yang lebih elegan dan cekap.
Memanfaatkan AsyncLazy
AsyncLazy<T>
menyediakan permulaan malas untuk operasi tak segerak. Ia merangkumi tugas tak segerak, membolehkan anda menunggu penyelesaiannya menggunakan GetAwaiter()
. Kelas AsyncLazy<T>
yang diubah suai sedikit ditunjukkan di bawah:
<code class="language-csharp">public class AsyncLazy<T> : Lazy<Task<T>> { public AsyncLazy(Func<T> valueFactory) : base(() => Task.Run(valueFactory)) { } public AsyncLazy(Func<Task<T>> taskFactory) : base(() => Task.Run(() => taskFactory())) { } public TaskAwaiter<T> GetAwaiter() { return Value.GetAwaiter(); } }</code>
Aplikasi Praktikal
Menggunakan AsyncLazy<T>
adalah mudah. Segerakkannya dengan logik permulaan anda sebagai ungkapan lambda:
<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () => { await DoStuffOnlyOnceAsync(); return true; });</code>
Untuk melaksanakan permulaan, cuma tunggu objek asyncLazy
:
<code class="language-csharp">await asyncLazy;</code>
Ringkasan
AsyncLazy<T>
menyediakan mekanisme yang bersih dan cekap untuk memastikan pelaksanaan tunggal kaedah permulaan tak segerak. Ia memudahkan pembangunan dengan menghapuskan kerumitan penguncian manual atau pengurusan semaphore, menghasilkan kod yang lebih mudah dibaca dan diselenggara.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Pelaksanaan Tunggal Kaedah Permulaan Tak Segerak dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!