async/await를 사용하여 리소스 액세스를 잘 구현하는 방법을 알고 싶습니다. 나는 LDAP에 프록시 역할을하는 첫 번째 액세스에 모든 데이터를 버퍼링해야하는 웹 애플리케이션에서 싱글 톤 서비스를 사용합니다. 이후의 모든 호출은 캐시를 통해 수행되지만 캐시가 무효화되고 데이터가 다시 얻어야합니다. 이제 내 구현은 다음과 같습니다 그러나비동기/대기 및 리소스 액세스
public async Task<string> GetUserDisplayName(string username)
{
var users = await GetCachedUsers();
// code using users from cache
}
private async Task<IEnumerable<LdapUser>> GetCachedUsers()
{
var users = _Cache.Get<IEnumerable<LdapUser>>();
if (users == null)
{
users = await _Connector.GetAllUsers();
_Cache.Add(users, TimeSpan.FromHours(USER_CACHE_VALID_HOURS));
}
return users;
}
내가 몇 요청이 서비스를 처음에 갈 때 그들이 같은 작업에 기다리고해야한다는 이런 식으로이를 구현하는 방법을 궁금하네요 내 요구 사항을 충족 것이 아니라, 차단되지 않고 LDAP에서 다운로드하는 것은 한 번만 수행해야합니다. 이 전통적으로 할 수있는 리소스를 잠글 수 있지만 해당 스레드가 차단 될 및 async/wait 패턴과 같은 비동기 방식으로 스레드 풀에 다시 싶습니다.