Sto cercando di utilizzare Interlocked.CompareExchange
con questo enum:Interlocked.CompareExchange con enum
public enum State {
Idle,
Running,
//...
}
Il seguente codice non si compila, ma questo è quello che voglio fare fare:
if (Interlocked.CompareExchange(ref state, State.Running, State.Idle) != State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Sicuro posso usare un int invece di enum e utilizzare una proprietà:
private int state = (int)State.Idle;
public State { get { return (State)state; } }
poi gettato le enumerazioni ad un int:
if (Interlocked.CompareExchange(ref state, (int)State.Running, (int)State.Idle) != (int)State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Ma ci sono modi migliori per farlo?
Cosa tu mostri (trattandolo come un 'int' e un casting) è fondamentalmente esattamente ciò che faccio. –
@MarcGravell: in pratica? – joe
Per essere onesti non è un vero affare. Personalmente lo terrei come un "enum" ma lo lancio prima di fare lo scambio. – James