C#에서 비동기 초기화의 단일 실행 보장
비동기 프로그래밍에서는 초기화 절차가 한 번만 실행되도록 보장하는 것이 중요합니다. InitializeAsync()
메서드를 통해 비동기 초기화가 필요한 클래스를 상상해 보세요. 여러 스레드가 동시에 이 메서드를 호출하는 것을 방지하는 것이 중요합니다. SemaphoreSlim
을 사용할 수도 있지만 더 효율적이고 우아한 방법이 존재합니다.
AsyncLazy: 간소화된 솔루션
표준 .NET 클래스의 확장인 AsyncLazy
Lazy
은 비동기 초기화를 위해 설계되었습니다. 간단하고 효과적인 솔루션을 제공합니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!