Tuesday, July 21, 2020

Dispose 计时器 System.Threading.Timer 问题

1. 在彻底销毁前等待排队中的和进行中的回调完成
using (ManualResetEvent waitHandle = new ManualResetEvent(false))
{
    //若_timer.Dispose(waitHandle)已被调用过,则会返回false,可以防止重复调用
    if (_timer.Dispose(waitHandle))
     {
         //等待排队中的和正在执行的回调完成,并设置超时
         //回调结束时会自动调用waitHandle.Set()来解除阻塞
         waitHandle.WaitOne(milliseconds);

     }
}

2.  在Dispose后,回调中的ObjectDisposedException异常
try
{
    _timer.Change(dueTime, period);
}
catch(ObjectDisposedException)
{

}


参考:
注意Dispose(WaitHandle) 方法的备注Remarks部分


No comments:

Post a Comment

华为交换机option43和60实例

AC: Aruba 651- 10.77.25.1 AP: Aruba 105 - 172.17.2.0/24 SW: 华为S5720  ip pool pool2  gateway-list 172.17.2.1  network 172.17.2.0 mask 255.255...