我一直在寻找 C# 中锁定语句的可等待等效项。有些人建议使用二进制文件SemaphoreSlim
通过以下方式:
await semaphore.WaitAsync().ConfigureAwait(false);
try
{
//inner instructions
}
finally
{
semaphore.Release();
}
我知道它有一些问题(例如它不可重入),但我最关心的是指令重新排序。
在普通的旧锁语句中,我们保证来自锁的内部指令不会被移到锁语句之外(之前或之后)。这个信号量解决方案也同样适用吗?据我所知,文档没有提到这个问题。
SemaphoreSlim
,以及几乎所有其他同步结构,都是使用Monitor
(或建立在Monitor
)在内部,这正是lock
已实施,为您提供相同的保证。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)