为什么在C#中没有获取信号量多个许可的方法?我想像这样使用我的信号量:
semaphore.Acquire(2);
Run Code Online (Sandbox Code Playgroud)
良好的api设计是一门艺术,只有少数人才能真正掌握.一个重要方面是强调共性..NET Semaphore类具有此功能,WaitOne()用于获取信号量.就像你在所有同步类上一样.
通过知道遗漏什么,它变得特别精美.自定义Aquire(n)方法在该切割清单上会很高.这是一个非常麻烦的方法,Windows上的底层本机实现也不支持它.这产生了引发死锁的严重风险,这种死锁几乎无法调试,代码将挂在一个隐藏的方法中,这个方法循环,深埋在CLR内部.当需要中止代码时,这会增加很多语义来等待很多事情.您可以自由循环,一个简单的解决方法,当然在调试死锁时很明显,您至少可以检查计数器.