mutexWrapOperation = async (operation, mutexIdentifier) => {
      try {
        await this.mutex_.acquire(mutexIdentifier);
        await detectInterruption();
        await operation();
        await detectInterruption();
        if (preloadManager && this.config_) {
          preloadManager.reconfigure(this.config_);
        }
      } finally {
        this.mutex_.release();
      }
    }
Wraps a given operation with mutex.acquire and mutex.release, along with
calls to detectInterruption, to catch any other top-level calls happening
while waiting for the mutex.
@param {function():!Promise} operation
@param {string} mutexIdentifier
@return {!Promise}