> 백엔드 개발 > C++ > C#에서 비동기 초기화 메서드의 단일 실행을 어떻게 보장할 수 있나요?

C#에서 비동기 초기화 메서드의 단일 실행을 어떻게 보장할 수 있나요?

Linda Hamilton
풀어 주다: 2025-01-13 21:48:42
원래의
605명이 탐색했습니다.

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

C#에서 비동기 초기화 방법의 단일 실행

C# 개발에서는 비동기 초기화 메서드가 한 번만 실행되도록 하는 것이 중요합니다. 이는 여러 스레드가 동시에 동일한 초기화를 시도하여 잠재적인 오류가 발생하는 경쟁 조건을 방지합니다. SemaphoreSlim가 솔루션을 제공하는 반면, AsyncLazy<T> 패키지의 Microsoft.Extensions.Primitives은 더욱 우아하고 효율적인 접근 방식을 제공합니다.

AsyncLazy 활용

AsyncLazy<T>은 비동기 작업을 위한 지연 초기화를 제공합니다. 비동기 작업을 캡슐화하여 GetAwaiter()을 사용하여 완료를 기다릴 수 있습니다. 약간 수정된 AsyncLazy<T> 클래스는 다음과 같습니다.

<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<T> 사용법은 간단합니다. 초기화 논리를 사용하여 람다 식으로 인스턴스화합니다.

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

초기화를 실행하려면 asyncLazy 객체를 기다리세요.

<code class="language-csharp">await asyncLazy;</code>
로그인 후 복사

요약

AsyncLazy<T>은 비동기 초기화 방법의 단일 실행을 보장하기 위한 깔끔하고 효율적인 메커니즘을 제공합니다. 수동 잠금 또는 세마포어 관리의 복잡성을 제거하여 개발을 단순화하여 더 읽기 쉽고 유지 관리하기 쉬운 코드를 만듭니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿