Потрясающая работа @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
}

Ответы на вопрос(2)

Ваш ответ на вопрос