c# - Logic to ensure a method is only called once -
i'm writing idisposable class, intended used in multi-threaded environment. want make sure dispose() called once. far came with:
int _isdisposingasint = 0; public void dispose() { if (interlocked.exchange(ref _isdisposingasint , 1) == 0) return; // dispose code .... } is there more elegant way of achieving this?
edit
important addition - not intend call dispose() multiple threads. intend use _isdisposingasint signal background thread, listens serial port, , may terminate ungracefully, should not re-throw exception.
firstly, declare _isdisposingasint volatile because want updated in threads.
secondly, need declare object , lock it/exchange it's value in order know have been @ dispose. did in 1 line, there no shorter that. can in efficient way:
if(interlocked.compareexchange(ref _isdisposingasint , 1 , 0) == 0) this way check before exchange if value 0, , u save bus , blocking threads.
Comments
Post a Comment