Sin*_*atr 6 c# lambda dispose timer
我想要一些非常简单的东西
// increment counter
Interlocked.Increment(ref _counter);
// automatically decrement counter after 1 sec
Timer timer = new Timer((o) => {
    Interlocked.Decrement(ref _counter);
    (o as Timer).Dispose();
}, timer, 1000, Timeout.Infinite);
但是,此代码不可编译
使用未分配的局部变量'timer'
有什么简单的方法来修复它吗?一定是Threading.Timer.
PS:我不确定我是否必须打电话Dispose,这显然是未经管理的资源而且IDisposable仍然在msdn上他们警告
只要您使用Timer,就必须保留对它的引用.与任何托管对象一样,当没有对它的引用时,Timer会进行垃圾回收.Timer仍处于活动状态这一事实并不能阻止它被收集.
我实际上希望它被收集(自动处理?).那么,处置还是不处置?
有一个模式:
Timer timer = null;
timer = new Timer...
现在你可以timer在lambda体中使用了.这基本上是一种让编译器在执行相同操作时快乐的方法.
务必处理该计时器.定时器可能由操作系统句柄资源备份(我认为CLR实现改变了几次).我相信计时器还包含GC手柄.没有处理大部分时间都是无害的.但是谁知道你可以用大量不受干扰的计时器引发的稀有资源枯竭.
进行一些代码审查:如果您希望演员表始终有效,请不要使用as因为as文档失败是预期的情况.不是:(o as Timer).相反:((Timer)o).
| 归档时间: | 
 | 
| 查看次数: | 1512 次 | 
| 最近记录: |