private void UpdateState(int token, BrotliFileState newState) => worker.Sync(() => {
            if (token != currentToken)
            {
                Debug.WriteLine("Ignored state change due to mismatched token (" + token + " != " + currentToken + ")");
                return;
            }

            BrotliFileState prevState = state;
            state = newState;

            if (state is BrotliFileState.Starting)
            {
                replay.Clear();
            }

            replay.Add(state);

            StateChanged?.Invoke(this, new StateChangedEventArgs(prevState, newState));
        });
 public StateChangedEventArgs(BrotliFileState from, BrotliFileState to)
 {
     this.From = from;
     this.To   = to;
 }