비동기식 메서드의 단일 호출: 강력한 접근 방식
비동기 프로그래밍에서는 특히 초기화 중에 메서드를 여러 번 호출하는 것을 방지하는 것이 중요합니다. 중복 또는 동시 실행으로 인해 데이터 불일치 및 애플리케이션 오류가 발생할 수 있습니다. SemaphoreSlim
이 솔루션을 제공하지만 보다 간소화된 접근 방식은 AsyncLazy<T>
을 사용합니다.
AsyncLazy<T>
은 느리게 평가되고 비동기적으로 계산된 값을 제공합니다. 비동기 작업으로 AsyncLazy<bool>
을 초기화하면 단일 실행이 보장됩니다.
이러한 목적에 최적화된 세련된 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>
사용 방법은 간단합니다.
<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () => { await DoStuffOnlyOnceAsync(); return true; });</code>
참고: bool
반환 유형은 자리 표시자입니다. DoStuffOnlyOnceAsync
의 반환 값은 여기서 활용되지 않습니다.
이 AsyncLazy<T>
구현은 단일 비동기 메소드 호출을 보장하고 초기화 중에 애플리케이션 데이터 무결성을 유지하는 깔끔하고 효율적인 방법을 제공합니다.
위 내용은 비동기 메서드의 단일 호출을 어떻게 보장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!