Har*_*can 7 .net multithreading dispose semaphore
class myclass
{
private Semaphore _sync;
myclass ()
{
_sync = new Semaphore(1,1);
}
doasync()
{
_sync.WaitOne();
//do some stuff
_sync.Release();
}
}
somefunctionsomewhere()
{
var myobject = new myclass();
//spawn 100 threads that all call myobject.doasync()
}
Run Code Online (Sandbox Code Playgroud)
以上安全+清洁?当所有100个线程完成异步工作时,两个_sync是否会被释放并收集myclass?
如果没有,知道何时调用_sync.Dispose()的最佳方法是什么?
简答:不,你不需要调用Dispose().
答案很长:
虽然建议在使用信号量时调用Dispose(),但垃圾收集器迟早会处理信号量的资源.
对Dispose()的显式调用将保证关联资源的早期发布,但只有在短时间内创建并忘记大量Semaphore实例时才需要它.
如果你调用Dispose(),使用简单的Dispose()调用是完全没问题的.您不需要创建终结器,~myclass()因为这只会复制已经完成的Semaphore实现.
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |