Потрясающая работа @BrunoLM :)
я есть следующий код, который может быть вызван через несколько веб-запросов в одну секунду. Таким образом, я не хочу, чтобы второй + запрос попадал в базу данных, а ждал, пока первый не сделает.
Должен ли я рефакторинг это использоватьLazy<T>
ключевое слово класс вместо? Если 10 звонков наLazy<T>
часть кода происходит в то же время, 9 из этих вызовов ждут завершения первого?
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
}