C# 初始化使用后清空信号量属性的正确方法
我使用以下c代码初始化一些属性:C# 初始化使用后清空信号量属性的正确方法,c#,semaphore,lazy-initialization,C#,Semaphore,Lazy Initialization,我使用以下c代码初始化一些属性: class MyClass { private static readonly string _myLuaScript = "..."; private SemaphoreSlim _myLuaScriptSemaphore = new SemaphoreSlim(1, 1); private LoadedLuaScript? _myLoadedLuaScript = null; public async T
class MyClass
{
private static readonly string _myLuaScript = "...";
private SemaphoreSlim _myLuaScriptSemaphore = new SemaphoreSlim(1, 1);
private LoadedLuaScript? _myLoadedLuaScript = null;
public async Task<LoadedLuaScript> GetMyLoadedLuaScript
{
if (_myLoadedLuaScript == null)
{
await _myLuaScriptSemaphore.WaitAsync();
try
{
if (_myLoadedLuaScript == null)
{
_myLoadedLuaScript = await LoadAsync();
}
}
finally
{
_myLuaScriptSemaphore.Release();
}
}
return _myLoadedLuaScript;
}
}
class-MyClass
{
私有静态只读字符串_myluscript=“…”;
私有信号量lim_myLuaScriptSemaphore=新信号量lim(1,1);
private LoadedLuaScript?\u myLoadedLuaScript=null;
公共异步任务GetMyLoadedLuaScript
{
如果(_myLoadedLuaScript==null)
{
wait_myLuaScriptSemaphore.WaitAsync();
尝试
{
如果(_myLoadedLuaScript==null)
{
_myLoadedLuaScript=等待LoadAsync();
}
}
最后
{
_myLuaScriptSemaphore.Release();
}
}
返回_myLoadedLuaScript;
}
}
我的问题是,我如何正确地摆脱myLuaScriptSemaphore,因为有一点我不再需要它了。
理想情况下,我希望使用struct/classLoader
来处理此逻辑,但我似乎看不到一种方式可以优雅地不留下分配的内容
还有一个问题,但我不认为我不认为这是可行的,有没有办法在初始化阶段之后以某种方式返回
LoadedLuaScript
?如果是这样的话,也许您最好用一个可能不相关的函数替换它,但这样做的原因是什么呢?Wait semaphore.WaitAsync()
,而不仅仅是semaphore.Wait()
@lamptoos我想我不想阻止执行。另外,将它与LoadAsync一起使用是有意义的,所以这对我来说似乎是有意义的。我错过什么了吗?“这是不是太过分了?”马修沃森说,是的。谢谢,这似乎是我要找的。