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

我使用以下c代码初始化一些属性:

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/class
Loader
来处理此逻辑,但我似乎看不到一种方式可以优雅地不留下分配的内容


还有一个问题,但我不认为我不认为这是可行的,有没有办法在初始化阶段之后以某种方式返回
LoadedLuaScript
?如果是这样的话,也许您最好用一个可能不相关的函数替换它,但这样做的原因是什么呢?
Wait semaphore.WaitAsync()
,而不仅仅是
semaphore.Wait()
@lamptoos我想我不想阻止执行。另外,将它与LoadAsync一起使用是有意义的,所以这对我来说似乎是有意义的。我错过什么了吗?“这是不是太过分了?”马修沃森说,是的。谢谢,这似乎是我要找的。