Interlocked.CompareExchange с enum

Я пытаюсь использовать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");
}

Но есть ли лучшие способы сделать это?

Ответы на вопрос(4)

Ваш ответ на вопрос