Mam następujący kod, który może być wywołany przez wiele żądań internetowych w tej samej sekundzie. W związku z tym nie chcę, aby druga próba + trafiała w bazę danych, ale czeka aż pierwsza.Czy ten kod C# powinien być refaktoryzowany, aby używał klasy Lazy <T>?
Czy powinienem to zmienić, aby zamiast tego używać klasy Lazy<T>
słów kluczowych
? Jeśli 10 wywołań do kodu Lazy<T>
pojawia się w tym samym czasie, wykonaj 9 z tych połączeń, czekając na zakończenie pierwszego?
public class ThemeService : IThemeService
{
private static readonly object SyncLock = new object();
private static IList<Theme> _themes;
private readonly IRepository<Theme> _themeRepository;
<snip snip snip>
#region Implementation of IThemeService
public IList<Theme> Find()
{
if (_themes == null)
{
lock (SyncLock)
{
if (_themes == null)
{
// Load all the themes from the Db.
_themes = _themeRepository.Find().ToList();
}
}
}
return _themes;
}
<sip snip snip>
#endregion
}
'Lazy' nie jest słowem kluczowym. –
BoltClock
Więc jak to się nazywa? –
Jest to po prostu typ. Dokładniej, jest to klasa. – BoltClock