Ich frage mich, wie man den Ressourcenzugriff mit Async/erwarten schön implementieren. Ich habe einen Singleton-Dienst in der Web-Anwendung, der als Proxy für LDAP fungiert und alle Daten beim ersten Zugriff puffern muss - alle Aufrufe danach erfolgen über den Cache, aber nach einiger Zeit wird der Cache ungültig gemacht und die Daten sollten wieder abgerufen werden. Jetzt sieht meine Implementierung wie diese, aber es ist nicht meine Anforderungen erfüllenAsync/erwarten und Ressourcenzugriff
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;
}
Ich frage mich, wie das in dieser Art und Weise zu implementieren, dass, wenn Paar Anforderung an den Service ersten Mal gehen sie auf die gleiche Aufgabe abgewartet werden sollte, aber nicht blockiert und Download von LDAP sollte nur einmal gehen. Ich könnte dies traditionell tun und die Ressource sperren, aber die Threads werden blockiert und ich möchte, dass sie auf asynchrone Weise zum threadpool zurückkehren, wie in async/wait pattern.