>백엔드 개발 >C++ >C#에서 비동기 초기화의 단일 실행을 보장하려면 어떻게 해야 합니까?

C#에서 비동기 초기화의 단일 실행을 보장하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-13 21:49:43223검색

How Can I Ensure Single Execution of Asynchronous Initialization in C#?

C#에서 비동기 초기화의 단일 실행 보장

비동기 프로그래밍에서는 초기화 절차가 한 번만 실행되도록 보장하는 것이 중요합니다. InitializeAsync() 메서드를 통해 비동기 초기화가 필요한 클래스를 상상해 보세요. 여러 스레드가 동시에 이 메서드를 호출하는 것을 방지하는 것이 중요합니다. SemaphoreSlim을 사용할 수도 있지만 더 효율적이고 우아한 방법이 존재합니다.

AsyncLazy: 간소화된 솔루션

표준 .NET

클래스의 확장인 AsyncLazyLazy은 비동기 초기화를 위해 설계되었습니다. 간단하고 효과적인 솔루션을 제공합니다.

<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>

AsyncLazy 사용법은 간단합니다. 인스턴스화하여 비동기 초기화 논리를 제공합니다.

<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () =>
{
    await DoStuffOnlyOnceAsync();
    return true;
});</code>

요약

AsyncLazy은 비동기 초기화의 단일 실행을 보장하기 위한 강력하고 사용자 친화적인 방법을 제공합니다. 단순성으로 인해 중요한 초기화 기능에 대한 동시 호출을 방지하는 데 이상적입니다.

위 내용은 C#에서 비동기 초기화의 단일 실행을 보장하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.