我正在编写一个IDisposable
类,它旨在用于多线程环境。我想确保Dispose()
只被调用一次。到目前为止,我想出了:确保一种方法的逻辑只被调用一次
int _isDisposingAsInt = 0;
public void Dispose()
{
if (Interlocked.Exchange(ref _isDisposingAsInt , 1) == 0)
return;
// Dispose code
....
}
是否有一个更优雅的方式来实现这一目标?
编辑
重要补充 - 我不打算叫Dispose()
从多个线程。我打算使用_isDisposingAsInt
来发信号通知一个后台线程,后台线程监听一个串口,并可能不正常地终止,它不应该重新抛出一个异常。
调用IDisposable.Dispose从多个线程将是一个反模式。不要这样做。有一个线程是对象的所有者。编排执行流程,以便所有者线程确保在所有者调用Dispose之前使用该对象完成其他线程。 –
@sevatitov - 你是对的 - 我已经添加了一些关于我的用途的解释。 – bavaza