gpt4 book ai didi

c# - 是否应该重构此 C# 代码以改用 Lazy 类?

转载 作者:太空狗 更新时间:2023-10-29 18:08:43 25 4
gpt4 key购买 nike

我有以下代码可以同时通过多个网络请求调用。因此,我不希望第二个以上的请求命中数据库,而是等到第一个请求命中。

我是否应该重构它以使用 Lazy<T> keyword 类代替?如果 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
}

最佳答案

是的,您可以使用 Lazy<T>

来自 MSDN :

By default, Lazy objects are thread-safe. That is, if the constructor does not specify the kind of thread safety, the Lazy objects it creates are thread-safe. In multithreaded scenarios, the first thread to access the Value property of a thread-safe Lazy object initializes it for all subsequent accesses on all threads, and all threads share the same data. Therefore, it does not matter which thread initializes the object, and race conditions are benign.

是的,它不是关键字 - 它是一个 .NET 框架类,它形式化了延迟初始化经常需要的用例,并提供了开箱即用的功能,因此您不必“手动”执行。

关于c# - 是否应该重构此 C# 代码以改用 Lazy<T> 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com