Я пытаюсь использовать Interlocked.CompareExchange
с этим перечислением:
public enum State {
Idle,
Running,
//...
}
Следующий код не компилируется, но то, что я хочу сделать:
if (Interlocked.CompareExchange(ref state, State.Running, State.Idle) != State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Конечно, я могу использовать int вместо enum и использовать свойство:
private int state = (int)State.Idle;
public State { get { return (State)state; } }
Затем переведите перечисления в int:
if (Interlocked.CompareExchange(ref state, (int)State.Running, (int)State.Idle) != (int)State.Idle) {
throw new InvalidOperationException("Unable to run - not idle");
}
Но есть ли лучшие способы сделать это?