Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memastikan Pelaksanaan Tunggal Kaedah Permulaan Tak Segerak dalam C#?

Bagaimanakah Saya Boleh Memastikan Pelaksanaan Tunggal Kaedah Permulaan Tak Segerak dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-13 21:48:42606semak imbas

How Can I Ensure Single Execution of Asynchronous Initialization Methods in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn